Estou com o seguinte problema, o conversor personalizado não funciona e
gera a exception:
java.lang.ClassCastException: java.lang.String cannot be cast to br.com.sexshop.model.Categoria
Abaixo segue o código para melhor entendimento:
fragmento do código : Produto.xhtml
<h:outputLabelvalue="Categoria"for="categoria"/><h:selectOneMenuid="categoria"value="#{produtoBean.produto.categoria}"required="true"requiredMessage="Informe o campo Categoria!"><f:converterconverterId="CategoriaConverter"/><f:selectItemitemValue=""itemLabel="Selecione"/><f:selectItemsvalue="#{produtoBean.categorias}"var="categoria"itemValue="#{categoria.id_categoria}"itemLabel="#{categoria.nome}"/></h:selectOneMenu>
CategoriaConverter.java
@FacesConverter(value="categoriaConverter")publicclassCategoriaConverterimplementsConverter{@OverridepublicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringvalue){if(value!=null&&value.trim().length()>0){intcodigo=Integer.parseInt(value);try{CategoriaRNrn=newCategoriaRN();returnrn.categoria_id(codigo);}catch(Exceptione){thrownewConverterException("Não foi possivel encontrar a categoria de código "+value+"."+e.getMessage());}}returnnull;}@OverridepublicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectvalue){if(value!=null){Categoriacategoria=(Categoria)value;return""+categoria.getId_categoria();}return"";}}
Posta o código que vc monta o seu selectItems categoria
T
thayson.silva
ja tentei de duas maneiras e até agora nada.
1º Carregando uma List
Produto.xhtml
<h:outputLabelvalue="Categoria"for="categoria"/><h:selectOneMenuid="categoria"value="#{produtoBean.produto.categoria}"required="true"requiredMessage="Informe o campo Categoria!"><f:converterconverterId="CategoriaConverter"/><f:selectItemitemValue=""itemLabel="Selecione"/><f:selectItemsvalue="#{produtoBean.categorias}"var="categoria"itemValue="#{categoria.id_categoria}"itemLabel="#{categoria.nome}"/></h:selectOneMenu>
MeuBean
publicList<Categoria>getCategorias(){
CategoriaRNrn=newCategoriaRN();this.categorias=rn.listar(null);//null pq não quero filtrar as categorias;returncategorias;
}
2º Carregando uma List
Produto.xhtml
<h:outputLabelvalue="Categoria"for="categoria"/><h:selectOneMenuid="categoria"value="#{produtoBean.produto.categoria}"required="true"requiredMessage="Informe o campo Categoria!"><f:converterconverterId="CategoriaConverter"/><f:selectItemitemValue=""itemLabel="Selecione"/><f:selectItemsvalue="#{produtoBean.categoriaSelect}"/></h:selectOneMenu>
Dei uma olhada no seu post, adaptei ao meu código porem o erro ainda persiste, Erro:
java.lang.String cannot be cast to br.com.sexshop.model.Categoria
Vi aqui no seu blog um converter usando forClass, este se parece mais com o meu código porem da no mesmo erro.
LINK: http://uaihebert.com/?p=1414&page=10
Se não estou enganado, segundo o log acima, diz que não conseguiu converter uma String para um objeto Categoria correto?
H
Hebert_Coelho
thayson.silva:
Hebert Coelho,
Dei uma olhada no seu post, adaptei ao meu código porem o erro ainda persiste, Erro:
java.lang.String cannot be cast to br.com.sexshop.model.Categoria
Se não estou enganado, segundo o log acima, diz que não conseguiu converter uma String para um objeto Categoria correto?
Exato. Olhando o seu codigo, em que lugar você poderia receber uma String mas você está recebendo uma categoria?
Uma dica? faz um debug aí no converter. Veja c ele é chamado. Se não for, o problema está na página. ^^
T
thayson.silva
Grato a ajuda Hebert Coelho e rafael_jesus por terem me ajudado.
Consegui resolver o problema usando: @FacesConverter(forClass = Categoria.class)
Para que outras pessoas não passem pelo que passei vou dar uma detalhada na resolução do problema com o código abaixo:
Resolução
Fragmento da página.xhtml
<h:outputLabelvalue="Categoria"for="categoria"/><h:selectOneMenuid="categoria"value="#{produtoBean.produto.categoria}"required="true"requiredMessage="Informe o campo Categoria!"><f:selectItemitemValue=""itemLabel="Selecione"/><f:selectItemsvalue="#{produtoBean.categoriaSelect}"/></h:selectOneMenu>
@FacesConverter(forClass=Categoria.class)publicclassCategoriaConverterimplementsConverter{@OverridepublicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringvalue){if(value!=null&&value.trim().length()>0){intcodigo=Integer.parseInt(value);try{CategoriaRNrn=newCategoriaRN();returnrn.categoria_id(codigo);}catch(Exceptione){thrownewConverterException("Não foi possivel encontrar a categoria de código "+value+"."+e.getMessage());}}returnnull;}@OverridepublicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectvalue){if(value!=null){Categoriacategoria=(Categoria)value;return""+categoria.getId_categoria();}return"";}}