Caros,
Estou fazendo uma aplicação usando JSF, Spring e Hibernate no Netbeans 6.7. Como sou iniciante na tecnologia estou seguindo o Livro do Yuri Marx. A parte de negócios da aplicação parece estar ok, fiz alguns testes das classes DAO e Facade, inserindo, excluindo e consultado no banco. Mas estou encontrando problemas para construir as páginas usando JSF.
Tô fazendo uma tela master/detail onde na primeira aba é possível trabalhar com “Projetos”. Adicionando, Excluindo e Consultando Projetos. Ao tentar fazer a parte de consultas exibindo resultados em uma Table, populada atráves de ObjectListDataProvider encontro algumas “NullPointerException”.
O erro está neste trecho:
public String btnConsultarProjeto_action() {
getProjetoProvider().obterTodos(getSessionBean1().getUsuarioLogado().getIdUsuario());
return null;
}
Stack Trace
SEVERE: java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at com.sun.rave.web.ui.appbase.faces.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at com.sun.webui.jsf.component.WebuiCommand.broadcast(WebuiCommand.java:160)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
...
Início do código da página:
import dominio.Projeto;
import facade.ProjetoFacade;
import java.util.ResourceBundle;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.convert.DateTimeConverter;
public class CompletePage extends AbstractPageBean {
private Projeto projeto;
private ProjetoFacade projetoFacade;
private ProjetoProvider projetoProvider;
...
/**
* @return the projeto
*/
public Projeto getProjeto() {
return projeto;
}
/**
* @param projeto the projeto to set
*/
public void setProjeto(Projeto projeto) {
this.projeto = projeto;
}
/**
* @return the projetoFacade
*/
public ProjetoFacade getProjetoFacade() {
return projetoFacade;
}
/**
* @param projetoFacade the projetoFacade to set
*/
public void setProjetoFacade(ProjetoFacade projetoFacade) {
this.projetoFacade = projetoFacade;
}
/**
* @return the projetoProvider
*/
public ProjetoProvider getProjetoProvider() {
return projetoProvider;
}
/**
* @param projetoProvider the projetoProvider to set
*/
public void setProjetoProvider(ProjetoProvider projetoProvider) {
this.projetoProvider = projetoProvider;
}
...
public String btnConsultarProjeto_action() {
r
getProjetoProvider().obterTodos(getSessionBean1().getUsuarioLogado().getIdUsuario()); //Testar se está pegando todos
return null;
}
Projeto Provider
package provider;
import com.sun.data.provider.impl.ObjectListDataProvider;
import dominio.Projeto;
import facade.ProjetoFacade;
import java.util.ArrayList;
import java.util.Date;
/**
*
* @author romulo
*/
public class ProjetoProvider extends ObjectListDataProvider {
private ProjetoFacade projetoFacade;
private ArrayList projetoList = new ArrayList();
/** Creates a new instance of ProjetoProvider **/
public ProjetoProvider() {
projetoList.add(new Projeto());
setList(projetoList);
}
public void obterTodos(Integer idUsuario) {
projetoList.clear();
projetoList.addAll(projetoFacade.obterTodos(idUsuario));
}
public void obterPorNome(Integer idUsuario, String nome) {
projetoList.clear();
projetoList.addAll(projetoFacade.obterPorNome(idUsuario, nome));
}
public void obterPorData(Integer idUsuario, Date data) {
projetoList.clear();
projetoList.addAll(projetoFacade.obterPorData(idUsuario, data));
}
public ProjetoFacade getProjetoFacade() {
return projetoFacade;
}
public void setProjetoFacade(ProjetoFacade projetoFacade) {
this.projetoFacade = projetoFacade;
}
}
Projeto Facade
package facade;
import dao.ProjetoDAO;
import dominio.Projeto;
import java.util.List;
import java.util.Date;
/**
*
* @author romulo
*/
public class ProjetoFacade {
private ProjetoDAO projetoDAO;
/** Creates a new instance of ProjetoFacade */
public ProjetoFacade() {
}
public Projeto gravar(Projeto projeto) {
return projetoDAO.gravar(projeto);
}
public void excluir(Projeto projeto) {
projetoDAO.excluir(projeto);
}
public Projeto carregar(Integer id) {
return projetoDAO.carregar(id);
}
public List obterTodos(Integer idUsuario) {
return projetoDAO.obterTodos(idUsuario);
}
public List obterPorNome(Integer idUsuario, String nome) {
return projetoDAO.obterPorNome(idUsuario, nome);
}
public List obterPorData(Integer idUsuario, Date data) {
return projetoDAO.obterPorData(idUsuario, data);
}
public ProjetoDAO getProjetoDao() {
return projetoDAO;
}
public void setProjetoDao(ProjetoDAO projetoDAO) {
this.projetoDAO = projetoDAO;
}
}
faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>
<managed-bean>
<managed-bean-name>SessionBean1</managed-bean-name>
<managed-bean-class>epifinder.SessionBean1</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ApplicationBean1</managed-bean-name>
<managed-bean-class>epifinder.ApplicationBean1</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>RequestBean1</managed-bean-name>
<managed-bean-class>epifinder.RequestBean1</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>LoginPage</managed-bean-name>
<managed-bean-class>epifinder.LoginPage</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>usuario</property-name>
<value>#{usuario}</value>
</managed-property>
<managed-property>
<property-name>usuarioFacade</property-name>
<value>#{usuarioFacade}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>HeaderPage</managed-bean-name>
<managed-bean-class>epifinder.HeaderPage</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>PrincipalPage</managed-bean-name>
<managed-bean-class>epifinder.PrincipalPage</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/LoginPage.jsp</from-view-id>
<navigation-case>
<from-outcome>paginaPrincipal</from-outcome>
<to-view-id>/PrincipalPage.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/PrincipalPage.jsp</from-view-id>
<navigation-case>
<from-outcome>paginaLogin</from-outcome>
<to-view-id>/LoginPage.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>CompletePage</managed-bean-name>
<managed-bean-class>epifinder.CompletePage</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>projeto</property-name>
<value>#{projeto}</value>
</managed-property>
<managed-property>
<property-name>projetoFacade</property-name>
<value>#{projetoFacade}</value>
</managed-property>
<managed-property>
<property-name>projetoProvider</property-name>
<value>#{projetoProvider}</value>
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/CompletePage.jsp</from-view-id>
<navigation-case>
<from-outcome>paginaLogin</from-outcome>
<to-view-id>/LoginPage.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
webContext.xml
bye<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : webContext.xml
Created on : 24 de Julho de 2011, 00:43
Author : romulo
Description:
Purpose of the document follows.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="projetoProvider" class="provider.ProjetoProvider" scope="session">
<property name="projetoFacade" ref="projetoFacade" />
</bean>
</beans>
A página tem uma Table que está setada pra receber dados de projetoProvider, mas sempre que clico no botão para preencher a tabela acontece a exception informada. Alguém tem idéia do que estar errado? Preciso colocar aqui do post mais alguma outra informação para me ajudarem a corrigir o problema?
Muito obrigado,
Rômulo.