[Resolvido]NullPointerException em consulta para o AutoComplete do PrimeFace

10 respostas
A

Ola galera, quando tento usar o autocomplete do primefaces, ocorre o erro de NPE, porém na tabela do meu banco de dados eu tenho 2 pessoas, logo essa mensagem não deveria aparecer,
segue meu stackstrace:

Stacktrace:
WARNING: /pages/protected/admin/function/person/gereperson.xhtml @20,70 completeMethod="#{personMB.complete}": java.lang.NullPointerException
javax.el.ELException: /pages/protected/admin/function/person/gereperson.xhtml @20,70 completeMethod="#{personMB.complete}": java.lang.NullPointerException
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
	at org.primefaces.component.autocomplete.AutoComplete.broadcast(AutoComplete.java:359)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:927)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.teste.ems2.filter.AdminPagesFilter.doFilter(AdminPagesFilter.java:31)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.teste.ems2.filter.LoginCheckFilter.doFilter(LoginCheckFilter.java:69)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	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:562)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at com.teste.ems2.mb.personMB.complete(personMB.java:155)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	... 29 more
PersonMB - método complete
public List<Person> complete(String query) {
		
		List<Person> queryResult = new ArrayList<Person>();
		if (persons == null ){
			persons = personFacede.listAll(); // linha 155 do erro
		}
		for (Person p: persons) {
			if(p.getName().toLowerCase().contains(query)){
				queryResult.add(p);
			}
		}
		return queryResult;
	}
PersonFacede - metodo listAll
public List<Person> listAll() {
		personDAO.beginTransaction();
		List<Person> result = personDAO.findAll();
		personDAO.closeTransaction();
		return result;
	}
PersonDAO - herda AbstractDAO - método findAll
public List<T> findAll() {
		CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
		cq.select(cq.from(entityClass));
		return em.createQuery(cq).getResultList();
	}
AutoComplete do Prime
<p:autoComplete minQueryLength="4" value="#{personMB.person}" var ="person" itemLabel="#{person.name}" itemValue="#{person}" completeMethod="#{personMB.complete}" required="true" dropdown="true"/>

Obrigado pela ajuda!

10 Respostas

D

coloca um breakpoint na linha 155 do seu
PersonMB

Caused by: java.lang.NullPointerException  
    at com.teste.ems2.mb.personMB.complete(personMB.java:155)
A

Coloquei, mas não adianta nada, o erro NPE vem quando ele tenta executar essa linha, o sistema funciona perfeitamente.

Continua com o mesmo erro…

Caused by: java.lang.NullPointerException at com.teste.ems2.mb.PersonMB.complete(PersonMB.java:155) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.el.parser.AstValue.invoke(AstValue.java:262) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) ... 29 more

D

posta o código que tem essa linha, e indica ela com um comentário,

A

Ja postei, leia o meu primeiro post fazendo um favor.

PersonMB - método complete

D

post o resto da classe por favor

A

Ai esta, não vejo nada errado nela.

@ViewScoped
@ManagedBean
public class PersonMB extends AbstractMB implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Person person;
	private List<Person> person;
	private User user;
	private UserMB userMB;
	private PersonFacade personFacede;
	private List<RolePerson> roles;
	private RolePersonFacade roleFacede;

	
	public List<RolePerson> getAllRoles() {
		if (roles == null) {
			loadRoles();
		}
		return roles;
	}
	
	private RolePersonFacade getRoleFacede() {
		if (roleFacede == null) {
			roleFacede= new RolePersonFacade();
		}
		return roleFacede;
	}
	
	private void loadRoles() {
		roles = getRoleFacede().listAll();
	}

	public Person getPerson() {
		if (person == null) {
			person = new Person();
		}
		return person;
	}
	
	public void setPerson(Person person) {
		this.person = person;
	}
	
	public User getUser() {
		if (user == null) {
			user= new User();
		}
		return user;
	}
	
	public void setUser(User user) {
		this.user = user;
	}

	public PersonFacade getPersonFacade() {
		if (personFacede == null) {
			personFacede = new PersonFacade();
		}
		return personFacede;
	}
	
	public UserMB getUserMB() {
		if (userMB == null) {
			userMB = new UserMB();
		}
		return userMB;
	}

	public List<Person> getAllPerson() {
		if (persons == null) {
			loadPersons();
		}
		return persons;
	}

	private void loadPersons() {
		persons = getPersonFacade().listAll();
	}

	public void resetPerson() {
		person = new Person();
		user = new User();
	}

	public void createPerson() {
		try {
			getPersonFacade().createPerson(person);
			user.setPerson(person);
			user.setPassword(PasswordHash.create(user.getPassword()));
			getUserMB().createUser(user);
			closeDialog();
			displayInfoMessageToUser("Created With Sucess");
			loadPersons();
			resetPerson();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ops, we could not create. Try again later");
			e.printStackTrace();
		}
	}

	public void updatePerson() {
		try {
			getPersonFacade().updatePerson(person);
			closeDialog();
			displayInfoMessageToUser("Updated With Sucess");
			loadPersons();
			resetPerson();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ops, we could not create. Try again later");
			e.printStackTrace();
		}
	}

	public void deletePerson() {
		try {
			getPersonFacade().deletePerson(person);
			getUserMB().deleteUser(user);
			closeDialog();
			displayInfoMessageToUser("Deleted With Sucess");
			loadPersons();
			resetPersone();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ops, we could not create. Try again later");
			e.printStackTrace();
		}
	}
	
	public List<Person> complete(String query) {
		
		List<Person> queryResult = new ArrayList<Person>();
		if (persons == null ){
			persons = personFacede.listAll();
		}
		for (Person p: persons) {
			if(p.getNom().toLowerCase().contains(query)){
				queryResult.add(p);
			}
		}
		return queryResult;
	}

}
D

estou pedindo o resto da classe porque quero ver como vc esta instanciando esse atributo

personFacede

public List<Person> complete(String query) {  
          
        List<Person> queryResult = new ArrayList<Person>();  
        if (persons == null ){  
            persons = personFacede.listAll(); // se esse atributo for personFacede iqual null vc vai ter um ErroDoProgramadorException
        }  
        for (Person p: persons) {  
            if(p.getName().toLowerCase().contains(query)){  
                queryResult.add(p);  
            }  
        }  
        return queryResult;  
    }

instancie a classe antes de chamar o método

D
personFacede.listAll();

Nesta chamada, personFacade está nulo.
Não seria o caso de invocar o getter do mesmo?

A

God! LOL

Obrigado pela ajuda, que erro bobo que cometi, fiquei brigando com o DAO e tudo mais e não prestei atenção a isso:

Resolvi como voces disseram, coloquei:

Funcionou!

OBS: posso aproveitar o topico para pedir ajuda para fazer o converter (POJO) do meu objeto Pessoa ?

Gostaria de quando o usuario selecionar o nome da pessoa, carregasse todos os dados referente à pessoa, pra isso preciso fazer o converter, porém não esta sei como fazer esse link do converter com os <p:inputText>

D

E desde quando pojo é um converter?
Faça assim, esse problema foi resolvido? Edite o tópico original e coloque no título o “prefixo” [Resolvido].
Crie um novo tópico e discorra sobre tuas mazelas com o converter.

Criado 13 de maio de 2013
Ultima resposta 13 de mai. de 2013
Respostas 10
Participantes 3