Fórum Problema com uso da classe Converter #445672
17/06/2013
0
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
Curtir tópico
+ 0Posts
18/06/2013
Marcelo Senaga
target.getClass().getName().
Provavelmente não é do tipo Área, e sim String.
Poste o código da página também.
Gostei + 0
18/06/2013
Victorsouza
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
18/06/2013
Marcelo Senaga
E outra, deve implementar equals() e hashCode() da sua entidade, pois se não implementar, irá dar erro no validador.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)