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