Problema com uso da classe Converter

Java

17/06/2013

Oi Pessoal, to precisando muito de uma ajuda com uso da classe Converter...
Retorno os objetos de uma classe para apresentar num selectOneMenu, até ai tudo bem, apresenta tudo direitinho, mas quando implemento a classe Converter para tratar os dados, apresenta o seguinte erro:


java.lang.ClassCastException: java.lang.String cannot be cast to financeiro.area.Area
	at financeiro.web.converter.AreaConverter.getAsString(AreaConverter.java:32)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:519)
        ...


O converter está na forma abaixo, mas esse erro acusa na linha que instancio a classe Area (Area area = (Area) target;)

package financeiro.web.converter;

import financeiro.area.*;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;
import javax.faces.application.FacesMessage;

@FacesConverter(value="AreaConverter",forClass = Area.class)
public class AreaConverter implements Converter{

    @Override
      public Object getAsObject(FacesContext context,UIComponent componente, String value) throws ConverterException{
        String texto = String.valueOf(value);
        AreaRN tp=new AreaRN();
        Integer codigo = Integer.valueOf(texto);
        return tp.carregar(codigo);
    }  

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object target) throws ConverterException{
        if (target!=null){             
           Area area = (Area) target;
           return area.toString();
        }  
         return null;  
    } 
}


O código do método que lista, no meu Bean está assim:

    public List<SelectItem> getAreas(){
        AreaRN areaService = new AreaRN();

        List<Area> areas = areaService.listar();

        List<SelectItem> itens = new ArrayList<SelectItem>();

        for(Area p : areas){
            itens.add(new SelectItem(p.getArea(), p.getDescricao()));
        }
        
        return itens;
    }



Por favor, me ajudem...
Victorsouza

Victorsouza

Curtidas 0

Respostas

Marcelo Senaga

Marcelo Senaga

17/06/2013

Imprima o class name dessa variável: target

target.getClass().getName().

Provavelmente não é do tipo Área, e sim String.

Poste o código da página também.
GOSTEI 0
Victorsouza

Victorsouza

17/06/2013

Ele retornava que era do tipo integer.

Mas eu fiz algumas alterações, o erro mudou, mas pelo jeito agora o converter está atuando corretamente, porém está com o erro:

Codigo da Area selecionado: 31

edicao:area: Erro de validação: o valor não é válido


Meu converter:
    @Override
      public Object getAsObject(FacesContext context,UIComponent componente, String value) throws ConverterException{
        String texto = String.valueOf(value);
        AreaRN tp=new AreaRN();
        Integer codigo = Integer.valueOf(texto);
                
        FacesContext.getCurrentInstance().addMessage("consulta:id",  
        new FacesMessage(" Codigo da Area selecionado: "+codigo));
                
        return tp.carregar(codigo);
    } 
   
   @Override
    public String getAsString(FacesContext context, UIComponent component, Object target) {  
        if (target!=null){             
           return String.valueOf(target);  
        }  
         return null;  
    } 


Acho que está correto porque ele imprime na tela os codigos da area selecionada, mas o resultado ainda assim é como se ele estivesse retornando outro tipo que não um "objeto" da Area.

Alguma sugestão?
GOSTEI 0
Marcelo Senaga

Marcelo Senaga

17/06/2013

Vc nao deveria usar Area ao inves de AreaRN?
E outra, deve implementar equals() e hashCode() da sua entidade, pois se não implementar, irá dar erro no validador.
GOSTEI 0
POSTAR