e ai galera.. seguinte fiz um aturo complete mas ele ta me retornando um objeto e não a string com o campo chamado nome alguem pode me ajuda? sera que tem q comverter para string?
public List<Categoria> complete (String prefix){
List<Categoria> todas = new ArrayList<Categoria>();
//Categoria cat = new Categoria();
todas = hibernateDao.complete("SELECT * FROM categoria where nomeCategoria like '%"+prefix+"%' ORDER BY nomeCategoria LIMIT 5");
return todas;
}
´
Fera, olhando rápido me parece que o problema está na linha 02 do componente autoComplete, pois o value deveria ser “#{categoriaBean.categoria}”. O que você quer que apareça na tela (o nome) já está definido no atributo itemLabel. Em outras palavras, o seu autoComplete enxerga uma lista de Categoria e seleciona um objeto Categoria, por isso, deve guardar (atributo ‘value’) em um atributo do tipo Categoria no seu ManagedBean.
Forte abraço!
A
adornes
Outra observação que penso ser pertinente é que o seu método hibernateDao.complete() deve sempre retornar um List, mesmo que seja uma lista vazia. Sendo assim, não é necessário instanciar um ArrayList como é feito na linha 01, pois esse ArrayList não será usado para nada e só será uma coisa a mais para o garbage collector mandar para o espaço.
Em resumo, certifique-se de que o método hibernateDao.complete() retorna sempre uma lista (mesmo que vazia). Se sim, atribui null na variável ‘todas’ da linha 01, ou declara a variável direto na atribuição quente da linha 04.
Depois diz aí se funcionou.
Abraço!
M
michelorth_92
carra mto obrigado pela ajuda… fiz o que voce pedio mas agora ele não mostra nada e me da este erro
GRAVE: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.String
Bom, o atributo categoriaBean.categoria é do tipo Categoria?
E dá uma olhada geral no teu xhtml e vê se não tá faltando algum fecha-parêntesis ou fecha-aspas ou fecha-chaves ou se não tem coisa grudada (sem espaço separando) pois as vezes esses detalhes dão uns erros nada-a-ver assim no console.
M
michelorth_92
sim o categoria é do tipo categoria
verifiquei e esta tudo certo meu codigo…
vou postar minha classe categoria qm sabe ajuda em alguma coisa.
Cara, resolvi dar uma olhada com calma em um código que fiz e acho que matei a charada.
Você precisa de um converter!
Adicione como atributo do teu autoComplete o seguinte:
converter=“categoriaConverter”
E aí crie um converter:
packageseupacote;//arrume isso :)importjava.util.Map;importjavax.faces.component.UIComponent;importjavax.faces.context.FacesContext;importjavax.faces.convert.Converter;importjavax.faces.convert.FacesConverter;@FacesConverter(value="categoriaConverter")publicclassCategoriaConverterimplementsConverter{publicObjectgetAsObject(FacesContextctx,UIComponentcomponent,Stringvalue){if(value!=null){returnthis.getAttributesFrom(component).get(value);}returnnull;}publicStringgetAsString(FacesContextctx,UIComponentcomponent,Objectvalue){if(value!=null&&!"".equals(value)){// adiciona item como atributo do componente this.addAttribute(component,value);Longid=((Categoria)value).getIdCategoria();if(codigo!=null){returnString.valueOf(codigo);}}return(String)value;}protectedvoidaddAttribute(UIComponentcomponent,Objectvalue){Longid=((Categoria)value).getIdCategoria();if(id!=null){Stringkey=id.toString();this.getAttributesFrom(component).put(key,value);}}protectedMap<String,Object>getAttributesFrom(UIComponentcomponent){returncomponent.getAttributes();}}
Dependendo da versão do Java EE que você usa, vai precisar declarar esse converter no faces-config.xml. Se for o EE 6 não precisa.
Editei direto aqui no tópico, pode dar algum errinho besta como uma falta de ponto-e-vírgula ou algo do tipo. Mas a ideia é essa!
packagebr.com.vendas.controller;importjava.util.Map;importjavax.faces.component.UIComponent;importjavax.faces.context.FacesContext;importjavax.faces.convert.Converter;importjavax.faces.convert.FacesConverter;importbr.com.vendas.beans.Categoria;@FacesConverter(value="categoriaConverter")publicclassCategoriaConverterimplementsConverter{publicObjectgetAsObject(FacesContextctx,UIComponentcomponent,Stringvalue){if(value!=null){returnthis.getAttributesFrom(component).get(value);}returnnull;}publicStringgetAsString(FacesContextctx,UIComponentcomponent,Objectvalue){if(value!=null&&!"".equals(value)){// adiciona item como atributo do componente this.addAttribute(component,value);Integerid=((Categoria)value).getIdCategoria();if(id!=null){returnString.valueOf(id);}}return(String)value;}protectedvoidaddAttribute(UIComponentcomponent,Objectvalue){Integerid=((Categoria)value).getIdCategoria();if(id!=null){Stringkey=id.toString();this.getAttributesFrom(component).put(key,value);}}protectedMap<String,Object>getAttributesFrom(UIComponentcomponent){returncomponent.getAttributes();}}