Depois de varias pesquisas e algumas implementação sem sucesso venho até vocês. O problema e o seguinte tenho uma tela de cadastro e outra de consulta. a tela consulta é uma dataTable simples com os nomes e na frente de cada nome o botão excluir e editar. quando clico no botão editar, retorno para a tela cadastro. até ai OK. O problema é que no campo nome: onde eu estou tentando implementar um autoComplete quando digito uma letra onde ele deveria me retorna as sugestões, recebo o seguinte erro segue abaixo:
Teste Coverte getAsString Pessoa = Nome Nome Nome Nome Nome
dez 22, 2016 2:47:35 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/CadastroFuncionario.xhtml]
java.lang.ClassCastException: java.lang.String cannot be cast to br.com.amarildo.model.Pessoa
at br.com.amarildo.util.PessoaConverter.getAsString(PessoaConverter.java:32)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSuggestionsAsList(AutoCompleteRenderer.java:498)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSuggestions(AutoCompleteRenderer.java:393)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeResults(AutoCompleteRenderer.java:123)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeEnd(AutoCompleteRenderer.java:105)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:582)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1689)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIForm.visitTree(UIForm.java:371)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:403)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:322)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219)
at org.omnifaces.context.OmniPartialViewContext.processPartial(OmniPartialViewContext.java:139)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:430)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at br.com.amarildo.util.AutorizacaoFilter.doFilter(AutorizacaoFilter.java:35)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
segue o código do formulário abaixo:
<!DOCTYPE html>
<ui:composition template="/WEB-INF/template/Layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:o="http://omnifaces.org/ui">
<f:metadata>
<o:viewParam name="id" value="#{cadastroFuncionarioBean.funcionario}" />
<f:viewAction action="#{cadastroFuncionarioBean.prepararCadastro}" />
</f:metadata>
<ui:define name="titulo">Cadastro RH</ui:define>
<ui:define name="corpo">
<h1>Cadastro de Funcionários</h1>
<h:form id="frm">
<p:messages showDetail="false" showSummary="true" autoUpdate="true" />
<h3>Dados Pessoais</h3>
<p:panelGrid columns="4">
<p:outputLabel value="Nome" for="nome" />
<p:autoComplete id="nome" size="60"
value="#{cadastroFuncionarioBean.funcionario.pessoa}"
completeMethod="#{cadastroFuncionarioBean.pesquisarNomes}"
var="pessoa" itemLabel="#{pessoa.nome}" itemValue="#{pessoa}"
forceSelection="true" />
<p:outputLabel value="Cpf" for="cpf" />
<p:autoComplete id="cpf" size="14"
value="#{cadastroFuncionarioBean.funcionario.cpf}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCpfs}" />
<p:outputLabel value="Tipo" for="sexo" />
<p:selectOneButton id="sexo"
value="#{cadastroFuncionarioBean.funcionario.sexo}">
<f:selectItems
value="#{cadastroFuncionarioBean.tiposFuncionarios}"
var="tipoFuncionario" itemValue="#{tipoFuncionario}"
itemLabel="#{tipoFuncionario.sexo}" />
</p:selectOneButton>
</p:panelGrid>
<h3>Endereço</h3>
<p:panelGrid columns="4">
<p:outputLabel value="Endereço" for="endereco" />
<p:autoComplete id="endereco" size="60"
value="#{cadastroFuncionarioBean.pessoa.endereco}"
completeMethod="#{cadastroFuncionarioBean.pesquisarEnderecos}" />
<p:outputLabel value="Numero" for="numero" />
<p:autoComplete id="numero" size="6"
value="#{cadastroFuncionarioBean.pessoa.numero}"
completeMethod="#{cadastroFuncionarioBean.pesquisarNumeros}" />
<p:outputLabel value="Complemento" for="complemento" />
<p:autoComplete id="complemento" size="20"
value="#{cadastroFuncionarioBean.pessoa.complemento}"
completeMethod="#{cadastroFuncionarioBean.pesquisarComplementos}" />
<p:outputLabel value="Bairro" for="bairro" />
<p:autoComplete id="bairro" size="30"
value="#{cadastroFuncionarioBean.pessoa.bairro}"
completeMethod="#{cadastroFuncionarioBean.pesquisarBairros}" />
<p:outputLabel value="Cidade" for="cidade" />
<p:autoComplete id="cidade" size="30"
value="#{cadastroFuncionarioBean.pessoa.cidade}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCidades}" />
<p:outputLabel value="Estado" for="estado" />
<p:autoComplete id="estado" size="2"
value="#{cadastroFuncionarioBean.pessoa.estado}"
completeMethod="#{cadastroFuncionarioBean.pesquisarEstados}" />
<p:outputLabel value="Cep" for="cep" />
<p:autoComplete id="cep" size="9"
value="#{cadastroFuncionarioBean.pessoa.cep}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCeps}" />
</p:panelGrid>
<h3>Dados de Admissão</h3>
<p:panelGrid columns="2">
<p:outputLabel value="Cargo" for="cargo" />
<p:autoComplete id="cargo" size="60"
value="#{cadastroFuncionarioBean.funcionario.cargo}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCargos}" />
<p:outputLabel value="Salário" />
<p:inputText size="12"
value="#{cadastroFuncionarioBean.funcionario.salario}"
label="salario">
<f:convertNumber locale="pt_BR" maxFractionDigits="2"
minFractionDigits="2" />
</p:inputText>
<p:outputLabel value="Data de Admissão" for="dataAdmissao" />
<p:calendar id="dataAdmissao" size="12" pattern="dd/MM/yyyy"
value="#{cadastroFuncionarioBean.funcionario.dataAdmissao}">
<p:ajax event="dateSelect" update="@this dataAdmissao"
process="@this dataAdmissao"
listener="#{cadastroFuncionarioBean.dataAdmissaoAlterada}" />
</p:calendar>
</p:panelGrid>
<p:commandButton value="Salvar"
action="#{cadastroFuncionarioBean.salvar}" icon="ui-icon-disk"
update="@form" />
</h:form>
</ui:define>
</ui:composition>
segue meu converte que pega o Id e deve me retorna o nome:
package br.com.util;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.inject.Inject;
import br.com.model.Pessoa;
import br.com.repository.Pessoas;
@FacesConverter(forClass = Pessoa.class)
//@FacesConverter("themeConverter")
public class PessoaConverter implements Converter {
@Inject // funciona graças ao OmniFaces
private Pessoas pessoas;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Pessoa retorno = null;
System.out.println("Teste Coverte getAsObject Pessoa = "+value);
if (value != null && !"".equals(value)) {
retorno = this.pessoas.porId(new Long(value));
}
return retorno;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
System.out.println("Teste Coverte getAsString Pessoa = "+value);
if (value != null && !"".equals(value)) {
return ((Pessoa) value).getId().toString();
}
return null;
}
}
caso alguém saiba e possa me ajudar fico grato