Problema ao invocar método de um bean

1 resposta
M

Pessoal,

Com o objetivo de aprender JSF, resolvi criar uma simpes aplicativo de cadastro de usuários. A arquitetura da aplicação foi dividada em três pacotes : DAO, MODEL e BEANS.
Estou usando apenas JDBC para persistência.Tenho um form de login, por enquanto com USUÁRIO e SENHA predefinidos(tipo um usuário ADMINITRADOR, só para poder entrar no sistema).
Ao preencher os campos e clicar no botão de comando, aparecem vários links em modo texto.
Quando eu clico no link “Cadastrar Usuário”, o form não chega nem a ser exibido, aparecendo a mensagem :

"HTTP Status 500 -

type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /cadastraUsuario.jsp(42,4) The function validaSenha must be used with a prefix when a default namespace is not specified
… "

Código do arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?>
  <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com  /xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>WebUserManager2</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet
		</servlet-class><load-on-startup> 1 </load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
</web-app>

Código do arquivo faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer
  Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
  <faces-config>
  <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>/exibeUsuario.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>
  </faces-config>

Código da classe UsuarioBean

package beans;
   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()
	...

	// metodo validaSenha
	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);
			meuUsuario.setStatus(this.status);
			
			UsuarioDAO meuDao = new UsuarioDAO();
			meuDao.insereUsuario(meuUsuario);
			
			this.retorno = "sucesso";
		
		} else {
			
			this.retorno = "falha";
		}
		
		return retorno;
	}
	
  }

Código do form CadastaUsuario.jsf

<%@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 - Cadastramento de Usuário</title>
   </head>
   <body>
	<f:view>
		<h:outputText value="Preencha os dados do Usuário" />
        <br />
		<br />
		<h:form>
			<h:panelGrid columns="3">
				<h:outputText value="CPF :"></h:outputText>
				<h:inputText id="cpf" value="#{UsuarioBean.cpf}" required="true"></h:inputText>
				<h:message for="cpf" style="color: red"></h:message>
				<h:outputText value="Nome :"></h:outputText>
				<h:inputText id = "nome" value="#{UsuarioBean.nome}" required="true"></h:inputText>
				<h:message for="nome" style="color: red"></h:message>
				<h:outputText value="Senha :"></h:outputText>
				<h:inputSecret id="senha" value="#{UsuarioBean.senha}" required="true"></h:inputSecret>
				<h:message for="senha"style="color: red"></h:message>
				<h:outputText value="Confirma Senha :"></h:outputText>
				<h:inputSecret id="confirmaSenha" value="#{UsuarioBean.confirmaSenha}" required="true"></h:inputSecret>
				<h:message for="confirmaSenha" style="color: red"></h:message>
				<h:outputText value="Email Principal :"></h:outputText>
				<h:inputText id = "emailPrincipal" value="#{UsuarioBean.emailPrincipal}" required="true"></h:inputText>
				<h:message for="emailPrincipal" style="color: red"></h:message>
				<h:outputText value="Email Alternativo :"></h:outputText>
				<h:inputText id="emailAlternativo" value="#{UsuarioBean.emailAlternativo}" required="true"></h:inputText>
				<h:message for="emailAlternativo" style="color: red"></h:message>
				<h:outputText value="Telefone :"></h:outputText>
				<h:inputText id="telefone" value="#{UsuarioBean.telefone}" required="true"></h:inputText>
				<h:message for="telefone" style="color: red"></h:message>
				<h:outputText value="Perfil :"></h:outputText>
				<h:inputText id="perfil" value="#{UsuarioBean.perfil}" required="true"></h:inputText>
				<h:message for="perfil" style="color: red"></h:message>
				<br />
				<h:commandButton type="submit" value="Enviar" action="#{UsuarioBean.validaSenha()}"/>
			</h:panelGrid>
			<br />
			<br />
			<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>

Código da classe Usuario

package model;

  public class Usuario {
	
	// atributos
	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 Usuario() {
		
	}
	
	/* metodos get e set */
        ...
  }

Codigo da classe UsuarioDao

package dao;

   import model.Usuario;
   import java.sql.Connection;
   import java.sql.SQLException;
   import java.sql.PreparedStatement;

    public class UsuarioDAO {
	
	public void insereUsuario(Usuario u) {
		
		Connection conexao = null;
		ConectaMySQL con1 = new ConectaMySQL();
			
		String sql = "INSERT INTO usuario (" + "usuario_cpf, usuario_nome, usuario_senha, usuario_confsenha, " +
                             "usuario_emailprinc, usuario_emailalter, usuario_telefone, " + "usuario_perfil" 
                              + ") VALUES ('" + u.getCpf() + "', '" + u.getNome() + "', '" + u.getSenha()+ "', '" +  u.getConfirmaSenha()
                              + "', '" + u.getEmailPrincipal() + "', '" +  u.getEmailAlternativo() + "', '" + u.getTelefone() 
                              + "', '" + u.getPerfil() + "');";
				
		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) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
			con1.fechaConexao();
		}
			    		    
	}
	
  }

Codigo da classe ConectaMySQL

package dao;

   import java.sql.Connection;
   import java.sql.DriverManager;
   import java.sql.SQLException;
   import javax.swing.JOptionPane;

   public class ConectaMySQL {
    
   private  String driver;
   private  String url;
   private  String username;
   private  String password; 
   private  Connection conn; 
    
    
   ConectaMySQL() {
    	    
        //invoca método obtemConexao()
        //obtemConexao();
        
    }
    
   public Connection obtemConexao() {
    	        
        try {
        
            driver = "com.mysql.jdbc.Driver";
            url = "jdbc:mysql://127.0.0.1:3306/webusermanager";
            username = "root";
            password = "root"; 
            conn = null; 
        	
            Class.forName(driver);
            
            if ( conn == null ) {  // padrao de projeto SINGLETON
                
                conn = DriverManager.getConnection(url, username, password);
                
            }
        
            return conn;
            
        } catch (ClassNotFoundException cnfex) {
            
            System.err.println("Classe não encontrada. Impossível carregar o driver");
            cnfex.printStackTrace();
            conn = null;
            return conn;
                       
        } catch (SQLException sqlex) {
            
            System.err.println( "Impossivel conectar" );
            sqlex.printStackTrace();
            conn = null;
            return conn;
              
        }
        
    }
    
    public void fechaConexao() {
        
        try { 
             
            conn.close();
            
        } catch (SQLException sqlex) {
            
           System.err.println( "Problema ao tentar fechar a conexão com o SGBD" ); 
           sqlex.printStackTrace();
           
        }
        
    }

Desculpem o tamanho do post, mas resolvi postar logo o código de todas as classes e forms envolvidos para facilitar o trabalho de quem form me ajudar.
Gostaria de entender o que pode estar causando este erro e como solucioná-lo ?
Alguém poderia me ajudar ?
Agradece,

Max Carvalho

1 Resposta

M

UP

Pq a mensagem ficou lá para trás na lista.
Pode ser que ela não tenha sido vista.
Alguém poderia em ajudar ?

Agradece,

Max Carvalho

Criado 10 de outubro de 2009
Ultima resposta 13 de out. de 2009
Respostas 1
Participantes 1