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?
´[code]
<p:autoComplete id=“acForce” forceSelection=“true”
value="#{categoriaBean.categoria.nomeCategoria}"
completeMethod="#{categoriaBean.complete}"
var=“categoria” itemLabel="#{categoria.nomeCategoria}" itemValue="#{categoria}" />
´[/code]
´[code]
public List complete (String prefix){
List todas = new ArrayList();
//Categoria cat = new Categoria();
todas = hibernateDao.complete(“SELECT * FROM categoria where nomeCategoria like '%”+prefix+"%’ ORDER BY nomeCategoria LIMIT 5");
return todas;
}
´[/code]
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!
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!
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
Seu código ficou
<p:autoComplete id="acForce" forceSelection="true"
value="#{categoriaBean.categoria}" // Com a correção sugerida
completeMethod="#{categoriaBean.complete}"
var="categoria" itemLabel="#{categoria.nomeCategoria}" itemValue="#{categoria}" />
e mudou para este erro?
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. 
sim o categoria é do tipo categoria
verifiquei e esta tudo certo meu codigo…
vou postar minha classe categoria qm sabe ajuda em alguma coisa.
package br.com.vendas.beans;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
@Entity
public class Categoria implements Serializable{
private static final long serialVersionUID = 1L;
@GeneratedValue
@Id
private Integer idCategoria;
private String nomeCategoria;
public Integer getIdCategoria() {
return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
this.idCategoria = idCategoria;
}
public String getNomeCategoria() {
return nomeCategoria;
}
public void setNomeCategoria(String nomeCategoria) {
this.nomeCategoria = nomeCategoria;
}
}
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:
package seupacote; //arrume isso :)
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
@FacesConverter(value = "categoriaConverter")
public class CategoriaConverter implements Converter {
public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
if (value != null) {
return this.getAttributesFrom(component).get(value);
}
return null;
}
public String getAsString(FacesContext ctx, UIComponent component, Object value) {
if (value != null
&& !"".equals(value)) {
// adiciona item como atributo do componente
this.addAttribute(component, value);
Long id = ((Categoria) value).getIdCategoria();
if (codigo != null) {
return String.valueOf(codigo);
}
}
return (String) value;
}
protected void addAttribute(UIComponent component, Object value) {
Long id = ((Categoria) value).getIdCategoria();
if(id!=null){
String key = id.toString();
this.getAttributesFrom(component).put(key, value);
}
}
protected Map<String, Object> getAttributesFrom(UIComponent component) {
return component.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!
Testa ae!
<p:autoComplete id="acForce" forceSelection="true"
value="#{categoriaBean.categoria}" converter="categoriaConverter"
completeMethod="#{categoriaBean.complete}" var="categoria"
itemLabel="#{categoria.nomeCategoria}" itemValue="#{categoria}" />
package br.com.vendas.controller;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import br.com.vendas.beans.Categoria;
@FacesConverter(value = "categoriaConverter")
public class CategoriaConverter implements Converter {
public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
if (value != null) {
return this.getAttributesFrom(component).get(value);
}
return null;
}
public String getAsString(FacesContext ctx, UIComponent component, Object value) {
if (value != null
&& !"".equals(value)) {
// adiciona item como atributo do componente
this.addAttribute(component, value);
Integer id = ((Categoria)value).getIdCategoria();
if (id != null) {
return String.valueOf(id);
}
}
return (String) value;
}
protected void addAttribute(UIComponent component, Object value) {
Integer id = ((Categoria) value).getIdCategoria();
if(id!=null){
String key = id.toString();
this.getAttributesFrom(component).put(key, value);
}
}
protected Map<String, Object> getAttributesFrom(UIComponent component) {
return component.getAttributes();
}
}
o erro [e outro agora
05/05/2012 00:50:23 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/teste.xhtml]
java.lang.ClassCastException: br.com.vendas.beans.Categoria cannot be cast to java.lang.String
at br.com.vendas.controller.CategoriaConverter.getAsString(CategoriaConverter.java:35)
at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:74)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeHiddenInput(AutoCompleteRenderer.java:196)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSingleMarkup(AutoCompleteRenderer.java:144)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeMarkup(AutoCompleteRenderer.java:123)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeEnd(AutoCompleteRenderer.java:101)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:61)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)
at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:185)
at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:108)
at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:55)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
05/05/2012 00:50:23 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/Vendas] threw exception [br.com.vendas.beans.Categoria cannot be cast to java.lang.String] with root cause
java.lang.ClassCastException: br.com.vendas.beans.Categoria cannot be cast to java.lang.String
at br.com.vendas.controller.CategoriaConverter.getAsString(CategoriaConverter.java:35)
at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:74)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeHiddenInput(AutoCompleteRenderer.java:196)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSingleMarkup(AutoCompleteRenderer.java:144)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeMarkup(AutoCompleteRenderer.java:123)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeEnd(AutoCompleteRenderer.java:101)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:61)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)
at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:185)
at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:108)
at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:55)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
deu certo até que enfim obrigado…