Olá, estou iniciando com JSF + Primefaces e estou com um problema no AutoComplete.
package com.converter;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
//import com.facade.ClienteFacade;
import com.facade.ClienteFacadeImp;
import com.model.Cliente;
public class ClienteConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
ClienteFacadeImp clienteFacade = new ClienteFacadeImp();
int clienteId;
try {
clienteId = Integer.parseInt(arg2);
} catch (NumberFormatException exception) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Type the name of a Cliente and select it (or use the dropdow)", "Type the name of a Cliente and select it (or use the dropdow)"));
}
return clienteFacade.find(clienteId);
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
if (arg2 == null) {
return "";
}
Cliente cliente = (Cliente) arg2;
return String.valueOf(cliente.getId());
}
}
package com.mb;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;
import com.facade.ClienteFacade;
import com.facade.ClienteFacadeImp;
import com.model.Cliente;
@ManagedBean
@SessionScoped
public class ClienteMB extends AbstractMB{
@EJB
private ClienteFacade clienteFacade;
private boolean addNovoRegistro;
private List<Cliente> filteredClientes;
private Cliente cliente;
private List<Cliente> allClientes;
public Cliente getCliente() {
if(cliente == null){
cliente = new Cliente();
}
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public List<Cliente> getAllClientes() {
return clienteFacade.findAll();
}
public List<Cliente> getFilteredClientes() {
return filteredClientes;
}
public void setFilteredClientes(List<Cliente> filteredClientes) {
this.filteredClientes = filteredClientes;
}
public void salvar(ActionEvent Evento) throws Exception{
if (addNovoRegistro){
try {
try {
clienteFacade.save(cliente);
} catch (EJBException e) {
displayErrorMessageToUser("Erro ao salvar o Cliente");
}
displayInfoMessageToUser("Operação Concluída: Inclusão");
}
finally
{
atualizaList();
resetCliente();
}
}else{
try {
try {
clienteFacade.update(cliente);
} catch (EJBException e) {
displayErrorMessageToUser("Erro ao efetuar alteração. Verifique os dados de cliente");
}
displayInfoMessageToUser("Operação Concluída: Alteração");
}
finally
{
atualizaList();
resetCliente();
}
}
}
public void deleteClienteEnd(ActionEvent Evento)throws Exception{
try{
try {
clienteFacade.delete(cliente);
} catch (EJBException e) {
displayErrorMessageToUser("Erro ao efetuar alteração. Verifique os dados de cliente");
}
displayInfoMessageToUser("Operação Concluída: Exclusão");
}
finally
{
atualizaList();
resetCliente();
}
}
public boolean isAddNovoRegistro(){
return addNovoRegistro;
}
public void setAddNovoRegistro(boolean addNovoRegistro){
this.addNovoRegistro = addNovoRegistro;
}
private void atualizaList() throws Exception
{
clienteFacade.findAll();
}
public void resetCliente() {
cliente = new Cliente();
}
public List<Cliente> complete(String query){
List<Cliente> queryResult = new ArrayList<Cliente>();
if (allClientes == null){
clienteFacade = new ClienteFacadeImp();
allClientes = clienteFacade.findAll();
}
for(Cliente cliente : allClientes){
if(cliente.getRazaoSocial().toLowerCase().contains(query.toLowerCase())){
queryResult.add(cliente);
}
}
return queryResult;
}
}
xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:body>
<p:dialog id="dialog" header="Contrato" widgetVar="dialogContrato"
appendToBody="true" resizable="false" closable="false"
modal="true" showEffect="fade" hideEffect="fade" width="700">
<h:form id="frmContratoModal">
<h:panelGrid id="infosContrato" columns="3" style="margin-bottom:10px">
<h:inputHidden id="Id" value="#{contratoMB.contrato.id}" />
<p:outputLabel for="NumeroContrato" value="Numero Contrato:" />
<p:inputText id="NumeroContrato" value="#{contratoMB.contrato.numeroContrato}"
required="true" requiredMessage="Numero inválido" size="35" disabled="true">
</p:inputText>
<p:message for="NumeroContrato" display="text" />
<p:outputLabel for="TipoPagamento" value="Tipo Pagamento:" />
<p:selectOneMenu id="TipoPagamento" value="#{contratoMB.contrato.tipoPagamento}"
required="true" requiredMessage="Tipo Pagamento inválido" size="35" >
<f:selectItem itemLabel="Mensal" itemValue="Mensal"/>
<f:selectItem itemLabel="Anual" itemValue="Anual"/>
<f:selectItem itemLabel="Valor Unico" itemValue="Valor Unico"/>
</p:selectOneMenu>
<p:message for="TipoPagamento" display="text"/>
<p:outputLabel for="RazaoSocial" value="Razão Social:" />
<p:inputText id="RazaoSocial" value="#{clienteMB.cliente.razaoSocial}"
required="true" requiredMessage="Razão Social Inválida" size="35">
</p:inputText>
<p:autoComplete forceSelection="true" minQueryLength="3" value="#{clienteMB.cliente}"
var="cliente" itemLabel="#{cliente.razaoSocial}" itemValue="#{cliente.id}" completeMethod="#{clienteMB.complete}"
label="Razao Social" required="true" dropdown="true" />
<p:message for="RazaoSocial" display="text"/>
<h:inputHidden value="#{clienteMB.addNovoRegistro}" />
</h:panelGrid>
<p:separator />
<p:commandButton value="Salvar" icon="ui-icon-disk" title="Salvar"
actionListener="#{contratoMB.salvar}"
update="infosContrato,:frmTblContrato,:frmMsgErro"
oncomplete="handleRequest(xhr, status, args);"/>
<script type="text/javascript">
function handleRequest(xhr, status, args)
{
if (!args.validationFailed)
{
dialogCliente.hide();
}
else
{
jQuery('#dialog').effect("shake", { times:3 }, 100);
}
}
</script>
<p:commandButton value="Cancelar" title="Cancelar"
immediate="true" oncomplete="dialogContrato.hide();"
icon="ui-icon-close" />
</h:form>
</p:dialog>
</h:body>
</html>
E o Erro:
23:30:20,046 AVISO [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-localhost-127.0.0.1-8080-3) /paginas/protegidas/dialogs/dialogContrato.xhtml @39,85 completeMethod="#{clienteMB.complete}": java.lang.NullPointerException: javax.el.ELException: /paginas/protegidas/dialogs/dialogContrato.xhtml @39,85 completeMethod="#{clienteMB.complete}": java.lang.NullPointerException
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111) [jsf-impl-2.1.7-jbossorg-2.jar:]
at org.primefaces.component.autocomplete.AutoComplete.broadcast(AutoComplete.java:358) [primefaces-3.4.2.jar:]
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:935) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:489) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:897) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:626) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2039) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_37]
Caused by: java.lang.NullPointerException
at com.facade.ClienteFacadeImp.findAll(ClienteFacadeImp.java:45) [AROEJB.jar:]
at com.mb.ClienteMB.complete(ClienteMB.java:124) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_37]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.6.0_37]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.6.0_37]
at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.6.0_37]
at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
... 22 more
Desde já agradeço qualquer auxílio.


