Pessoal,
Tenho, em um form JSF, um campo de texto para a pesquisa de um usuário pelo seu nome em uma tabela MySQL.
Se existe na tabela um usuário com aquele nome, dá tudo certo, é exibida uma nova página com os dados persistidos no banco.
Acontece porém, que se o usuário pesquisado não existe, é lançada uma NullPointExcetpion.
Seguem, abaixo, os códigos-fonte envolvidos :
Arquivo faces-config.xml
<?xml version="1.0"?>
<faces-config 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"
version="1.2">
<application>
<resource-bundle>
<base-name>messages</base-name>
<var>msg</var>
</resource-bundle>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>en_US</supported-locale>
</locale-config>
</application>
<managed-bean>
<managed-bean-name>loginForm</managed-bean-name>
<managed-bean-class>beans.LoginFormBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>UsuarioBean</managed-bean-name>
<managed-bean-class>beans.UsuarioBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>menu</from-outcome>
<to-view-id>/menu.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>falha</from-outcome>
<to-view-id>/erro_login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/cadastraUsuario.jsp</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>/sucesso_cadastro.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/cadastraUsuario.jsp</from-view-id>
<navigation-case>
<from-outcome>falha</from-outcome>
<to-view-id>/erro_cadastro.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/consultaUsuario.jsp</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>/exibeUsuario.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/consultaUsuario.jsp</from-view-id>
<navigation-case>
<from-outcome>falha</from-outcome>
<to-view-id>/erro_consulta.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Form consultaUsuario.jsp
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>WebUserManager - Consulta de Usuário</title>
</head>
<body>
<f:view>
<h:outputText value="WebUserManager - Consulta de Usuario" />
<br />
<br />
<h:form>
<h:panelGrid columns="1">
<h:outputText value="Entre com o nome do usuário a ser pesquisado" />
<br />
<h:outputText value="Nome :"></h:outputText>
<h:inputText value="#{UsuarioBean.nome}"></h:inputText>
<br />
<h:commandButton type="submit" value="Enviar" action="#{UsuarioBean.ConsultaUsuarioBean}"/>
<br />
<br />
</h:panelGrid>
<h:outputLink value = "menu.jsf">
<h:outputText value="< Voltar" />
</h:outputLink>
<br />
<br />
<h:outputLink value = "login.jsf">
<h:outputText value="< Sair" />
</h:outputLink>
</h:form>
</f:view>
</body>
</html>
classe UsuarioBean
package beans;
import java.util.ArrayList;
import java.util.List;
import model.Usuario;
import dao.UsuarioDAO;
public class UsuarioBean {
private String cpf;
private String nome;
private String senha;
private String confirmaSenha;
private String emailPrincipal;
private String emailAlternativo;
private String telefone;
private String perfil;
private String status;
private String retorno="";
public UsuarioBean() {
}
// metodos get() e set()
/* ... */
public String validaSenha() {
if ( this.senha.equals(this.confirmaSenha )) {
Usuario meuUsuario = new Usuario();
meuUsuario.setCpf(this.cpf);
meuUsuario.setNome(this.nome);
meuUsuario.setSenha(this.senha);
meuUsuario.setConfirmaSenha(this.confirmaSenha);
meuUsuario.setEmailPrincipal(this.emailPrincipal);
meuUsuario.setEmailAlternativo(this.emailAlternativo);
meuUsuario.setTelefone(this.telefone);
meuUsuario.setPerfil(this.perfil);
UsuarioDAO meuDao = new UsuarioDAO();
meuDao.insereUsuarioDAO(meuUsuario);
this.retorno = "sucesso";
} else {
this.retorno = "falha";
}
return retorno;
}
public String ConsultaUsuarioBean() {
System.out.println("Entrei no metodo ConsultaUsuarioBean");
UsuarioDAO outroDao = new UsuarioDAO();
Usuario u2 = outroDao.consultaUsuarioDAO(this.nome);
if (!u2.getNome().equals(this.nome)) {
this.retorno = "falha";
} else {
this.retorno = "sucesso";
this.nome = u2.getNome();
this.cpf = u2.getCpf();
this.emailPrincipal = u2.getEmailPrincipal();
this.emailAlternativo = u2.getEmailAlternativo();
this.telefone = u2.getTelefone();
this.perfil = u2.getPerfil();
}
return retorno;
}
public List<UsuarioBean> getlistaUsuarioBean() {
List<UsuarioBean> listaBean = new ArrayList<UsuarioBean>();
Usuario u1 = new Usuario();
listaBean = u1.listaUsuario();
return listaBean;
}
}
classe Usuario
package model;
import java.util.List;
import java.util.ArrayList;
import beans.UsuarioBean;
import dao.UsuarioDAO;
public class Usuario {
private String cpf;
private String nome;
private String senha;
private String confirmaSenha;
private String emailPrincipal;
private String emailAlternativo;
private String telefone;
private String perfil;
private String status;
public Usuario() {
}
// metodos get e set
/* ... */
public List<UsuarioBean> listaUsuario() {
List<UsuarioBean> listaBean = new ArrayList<UsuarioBean>();
List<Usuario> listaUsuario = new ArrayList<Usuario>();
UsuarioDAO dao1 = new UsuarioDAO();
listaUsuario = dao1.listaUsuarioDAO();
for (int i = 0; i < listaUsuario.size(); i++ ) {
UsuarioBean meuBean = new UsuarioBean();
meuBean.setCpf( listaUsuario.get(i).getCpf() );
meuBean.setNome( listaUsuario.get(i).getNome() );
meuBean.setEmailPrincipal( listaUsuario.get(i).getEmailPrincipal() );
meuBean.setEmailAlternativo( listaUsuario.get(i).getEmailAlternativo() );
meuBean.setTelefone( listaUsuario.get(i).getTelefone() );
meuBean.setPerfil( listaUsuario.get(i).getPerfil() );
listaBean.add(meuBean);
}
return listaBean;
}
}
classe UsuarioDAO
package dao;
import model.Usuario;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import java.util.ArrayList;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
public class UsuarioDAO {
public void insereUsuarioDAO(Usuario u) {
Connection conexao = null;
ConectaMySQL con1 = new ConectaMySQL();
String sql = "INSERT INTO tb_usuario (usuario_cpf, usuario_nome, usuario_senha, usuario_confsenha, " +"usuario_emailprinc, usuario_emailalter, usuario_telefone, " + "usuario_perfil ) VALUES (?,?,?,?,?,?,?,?)";
conexao = con1.obtemConexao();
try {
PreparedStatement pstmt = conexao.prepareStatement(sql);
pstmt.setString(1, u.getCpf());
pstmt.setString(2, u.getNome());
pstmt.setString(3, u.getSenha());
pstmt.setString(4, u.getConfirmaSenha());
pstmt.setString(5, u.getEmailPrincipal());
pstmt.setString(6, u.getEmailAlternativo());
pstmt.setString(7, u.getTelefone());
pstmt.setString(8, u.getPerfil());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
con1.fechaConexao();
}
}
public Usuario consultaUsuarioDAO(String nomePesq) {
System.out.println("Entrei no método consultaUsuarioDAO");
System.out.println("Nomes Pesq : " + nomePesq);
String cpf;
String nome;
String emailPrinc;
String emailAlter;
String telefone;
String perfil;
Connection conexao = null;
ConectaMySQL con1 = new ConectaMySQL();
ResultSet rs;
PreparedStatement pstmt;
String sql_cons = "select usuario_cpf, usuario_nome, usuario_emailprinc, usuario_emailalter, usuario_telefone, usuario_perfil " +
" from tb_usuario where usuario_nome = ?";
conexao = con1.obtemConexao();
Usuario u1 = new Usuario();
try {
pstmt = conexao.prepareStatement(sql_cons);
pstmt.setString(1, nomePesq);
rs = pstmt.executeQuery();
System.out.println("Passei pelo pstmt setString");
System.out.println("rs : " + rs);
while ( rs.next() ) {
nome = rs.getString(2);
if (nome.equals(null)) {
System.out.println("Usuario não encontrado");
u1 = null;
}
else {
cpf = rs.getString(1);
emailPrinc = rs.getString(3);
emailAlter = rs.getString(4);
telefone = rs.getString(5);
perfil = rs.getString(6);
u1.setCpf(cpf);
u1.setNome(nome);
u1.setEmailPrincipal(emailPrinc);
u1.setEmailAlternativo(emailAlter);
u1.setTelefone(telefone);
u1.setPerfil(perfil);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
pstmt = null;
desalocaRecursos(pstmt, rs);
con1.fechaConexao();
}
System.out.println("u1 : " + u1);
return u1;
}
public List<Usuario> listaUsuarioDAO() {
Connection conexao = null;
ConectaMySQL con1 = new ConectaMySQL();
ResultSet rs;
PreparedStatement pstmt;
List<Usuario> listaUsuario = new ArrayList<Usuario>();
String sql_cons = "select usuario_cpf, usuario_nome, usuario_emailprinc, usuario_emailalter, " +
"usuario_telefone, usuario_perfil from tb_usuario ";
conexao = con1.obtemConexao();
try {
pstmt = conexao.prepareStatement(sql_cons);
rs = pstmt.executeQuery();
while (rs.next() ) {
Usuario u2 = new Usuario();
u2.setCpf(rs.getString(1));
u2.setNome(rs.getString(2));
u2.setEmailPrincipal(rs.getString(3));
u2.setEmailAlternativo(rs.getString(4));
u2.setTelefone(rs.getString(5));
u2.setPerfil(rs.getString(6));
listaUsuario.add(u2);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
pstmt = null;
desalocaRecursos(pstmt, rs);
con1.fechaConexao();
}
return listaUsuario;
}
public Result getAll() throws SQLException{
Connection conexao = null;
ConectaMySQL con1 = new ConectaMySQL();
ResultSet rs;
PreparedStatement pstmt;
Result resultado;
String sql_cons = "select usuario_cpf, usuario_nome, usuario_emailprinc, usuario_emailalter, " +
"usuario_telefone, usuario_perfil from tb_usuario ";
conexao = con1.obtemConexao();
try {
pstmt = conexao.prepareStatement(sql_cons);
rs = pstmt.executeQuery();
resultado = ResultSupport.toResult(rs);
return resultado;
} finally {
rs = null;
pstmt = null;
desalocaRecursos(pstmt, rs);
con1.fechaConexao();
}
}
private void desalocaRecursos(PreparedStatement pstmt1, ResultSet rs1) {
try {
if (rs1 != null ) {
rs1.close();
}
if (pstmt1 != null) {
pstmt1.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Stracktrace do lançamento da exceção
30/10/2009 17:06:33 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1113 ms
Entrei no metodo ConsultaUsuarioBean
Entrei no método consultaUsuarioDAO
Nomes Pesq : Eduardo
Passei pelo pstmt setString
rs : com.mysql.jdbc.ResultSet@31fb31
u1 : model.Usuario@15b1773
30/10/2009 17:07:11 com.sun.faces.application.ActionListenerImpl processAction
SEVERE: java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:387)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at beans.UsuarioBean.ConsultaUsuarioBean(UsuarioBean.java:134)
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:172)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 20 more
Será que alguém poderia me ajudar a descobrir o que pode estar lançando essa exceção ?
Agradece,
Max Carvalho