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
[code]public List 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;
}[/code]
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
Obrigado pela ajuda!
coloca um breakpoint na linha 155 do seu
PersonMB
Caused by: java.lang.NullPointerException
at com.teste.ems2.mb.personMB.complete(personMB.java:155)
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
posta o código que tem essa linha, e indica ela com um comentário,
Ja postei, leia o meu primeiro post fazendo um favor.
PersonMB - método complete
post o resto da classe por favor
Ai esta, não vejo nada errado nela.
[code]
@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;
}
}[/code]
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
personFacede.listAll();
Nesta chamada, personFacade está nulo.
Não seria o caso de invocar o getter do mesmo?
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> …
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.