Formulário JSF retorna NullPointException se um dado pesquisado não é encontrado

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

Acho que o problema está no método ConsultaUsuarioBean na linha

if (!u2.getNome().equals(this.nome)) {  
    this.retorno = "falha";  
}

Explicando: mesmo que o método consultaUsuarioDAO retorne um Usuario (ele tem um new em uma parte dele), isso não quer dizer que a propriedade nome tenha alguma String não-nula. O método equals compara 2 Strings, e não é definida para ser chamada de um null. Talvez invertendo, fazendo

if (!this.nome.equals(u2.getNome())) {  
    this.retorno = "falha";  
}

resolva o seu problema, já que é mais certo que this.nome tenha uma string não-nula.