Fórum Problema com uso da classe Converter #445672

17/06/2013

0

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

Responder

Posts

18/06/2013

Marcelo Senaga

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.
Responder

Gostei + 0

18/06/2013

Victorsouza

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?
Responder

Gostei + 0

18/06/2013

Marcelo Senaga

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar