Estou fazendo uma agenda em jsf, segue os fontes e a mensagem de erro para alguém detectar !
erro
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<% response.sendRedirect("mostrar.faces"); %>
</body>
</html
><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Inserindo Novos Contatos</title>
</head>
<body>
<h2>Adicionar Novo Contato</h2>
<f:view>
<h:form id="cadastro">
<h:panelGrid columns="2">
<h:outputText value="Nome:"/>
<h:inputText size="25" id="nome" value="#{contatos.contato.nome}" />
<h:outputText value="Endereço:"/>
<h:inputText size="25" id="endereco" value="#{contatos.contato.endereco}"/>
<h:outputText value="Bairro:"/>
<h:inputText size="15" id="bairro" value="#{contatos.contato.bairro}"/>
<h:outputText value="Cidade:"/>
<h:inputText size="15" id="cidade" value="#{contatos.contato.cidade}" />
<h:outputText value="Estado:"/>
<h:inputText size="2" id="estado" value="#{contatos.contato.estado}" />
<h:outputText value="CEP:"/>
<h:inputText size="8" id="cep" value="#{contatos.contato.cep}" />
<h:outputText value="Telefone:"/>
<h:inputText size="15" id="telefone" value="#{contatos.contato.telefone}"/>
</h:panelGrid>
<h:commandButton value="Cadastrar" action="#{contatos.create}" />
<h:commandButton value="Limpar" type="reset" />
<h:commandButton value="Cancelar" action="mostrar" />
</h:form>
</f:view>
</body>
</html>
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<f:view>
<head>
<f:loadBundle basename="br.com.nitewing.agenda.mensagens" var="msgs" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><h:outputText value="#{msgs.Titulo}"/></title>
<link rel="stylesheet" type="text/css" href="estilo.css">
</head>
<body>
<h:form>
<h3><h:outputText value="#{msgs.Titulo}"/></h3>
<h:dataTable value="#{contatos.todos}" var="agenda"
border="0" headerClass="cabecalho"
rowClasses="linha1,linha2">
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Id}" />
</f:facet>
<h:outputText value="#{agenda.id}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Nome}" />
</f:facet>
<h:outputText value="#{agenda.nome}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Endereco}" />
</f:facet>
<h:outputText value="#{agenda.endereco}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Bairro}" />
</f:facet>
<h:outputText value="#{agenda.bairro}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Cidade}" />
</f:facet>
<h:outputText value="#{agenda.cidade}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Estado}" />
</f:facet>
<h:outputText value="#{agenda.estado}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Cep}" />
</f:facet>
<h:outputText value="#{agenda.cep}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.Telefone}" />
</f:facet>
<h:outputText value="#{agenda.telefone}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Excluir" />
</f:facet>
<h:commandLink value="Excluir" />
</h:column>
</h:dataTable>
<br />
<h:commandLink action="#{contatos.novoContato}"
value="Novo Contato" />
</h:form>
</body>
</f:view>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<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>*.faces</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<?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">
<managed-bean>
<description>
O Bean ContatosController
</description>
<managed-bean-name>contatos</managed-bean-name>
<managed-bean-class>br.com.nitewing.agenda.control.ContatosController
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<navigation-case>
<description>
Mostrando todos contatos
</description>
<from-outcome>mostrar</from-outcome>
<to-view-id>/mostrar.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>mostrar</display-name>
<from-view-id>/mostrar.jsp</from-view-id>
<navigation-case>
<description>
Adicionando um novo contato pela
pagina mostrar.jsp(mostrar.faces)
</description>
<from-outcome>novo</from-outcome>
<to-view-id>/inserirContato.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/inserirContato.jsp</from-view-id>
<navigation-case>
<description>
Regra de navegação caso ocorra sucesso na inserção do livro observe que o view outcome tem como valor strings que representam ações existentes tanto controller quanto nos formulários.
</description>
<from-outcome>sucesso_ins</from-outcome>
<to-view-id>/mostrar.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
===============================java=================================
package Control;
import Dao.ContatosDAO;
import Dao.ContatosDAOException;
import Dao.InterfaceContatosDAO;
import Model.Contatos;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
public class ContatosController {
private Contatos contato;
private DataModel model;
public String novoContato(){
this.contato = new Contatos();
return "novo";
}
public Contatos getContato(){
return contato;
}
public void setContato(Contatos contato){
this.contato = contato;
}
public DataModel getTodos() throws ContatosDAOException {
InterfaceContatosDAO icdao = new ContatosDAO();
model = new ListDataModel(icdao.listarTodos());
return model;
}
public String create()throws ContatosDAOException {
InterfaceContatosDAO icdao = new ContatosDAO();
icdao.salvar(contato);
return "sucesso_ins";
}
// Aqui acrescentaremos os métodos para Atualização e Exclusão.
}
package Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/*
* Esta classe sera a nossa fabrica de conexões. Ela cria a conexão
* e retorna o resultado para quem a chamar, obsever que ela faz uso
* de ContatosDAOException toda vez que ocorre um erro, alem disse ela possui
* métodos de CloseConnection para fechar a conexão, o Statement e o ResultSet
*
*/
public class ConnectContatosFactory {
public static Connection getConnection() throws ContatosDAOException {
try {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://localhost:3306/agenda", "root", "admin");
} catch (Exception e) {
throw new ContatosDAOException(e.getMessage());
}
}
public static void closeConnection(Connection conn, Statement stmt, ResultSet rs)
throws ContatosDAOException {
close(conn, stmt, rs);
}
public static void closeConnection(Connection conn, Statement stmt)
throws ContatosDAOException {
close(conn, stmt, null);
}
public static void closeConnection(Connection conn)
throws ContatosDAOException {
close(conn, null, null);
}
private static void close(Connection conn, Statement stmt, ResultSet rs) throws ContatosDAOException {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
throw new ContatosDAOException(e.getMessage());
}
}
}
package Dao;
import Model.Contatos;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class ContatosDAO implements InterfaceContatosDAO {
private Connection conn;
public ContatosDAO() throws ContatosDAOException {
try {
this.conn = ConnectContatosFactory.getConnection();
} catch (Exception e) {
throw new ContatosDAOException("Erro" + ":\n" + e.getMessage());
}
}
public void salvar(Contatos contato) throws ContatosDAOException {
PreparedStatement ps = null;
Connection conn = null;
if(contato == null)
throw new ContatosDAOException("O Valor passado não pode ser lido");
try {
String sql = "insert into registros(nome,endereco,bairro,cidade,estado,cep,telefone)" +
"values(?,?,?,?,?,?,?)";
conn = this.conn;
ps = conn.prepareStatement(sql);
ps.setString(1, contato.getNome());
ps.setString(2, contato.getEndereco());
ps.setString(3,contato.getBairro());
ps.setString(4, contato.getCidade());
ps.setString(5, contato.getEstado());
ps.setString(6, contato.getCep());
ps.setString(7, contato.getTelefone());
ps.executeUpdate();
} catch (Exception sqle) {
throw new ContatosDAOException("Erro ao inserir dados" + sqle);
}finally{
ConnectContatosFactory.closeConnection(conn, ps);
}
}
public List listarTodos() throws ContatosDAOException {
PreparedStatement ps = null;
Connection conn = null;
ResultSet rs = null;
try {
conn = this.conn;
ps = conn.prepareStatement("select id,nome,endereco,bairro," +
"cidade,estado,cep,telefone from registros");
rs = ps.executeQuery();
List list = new ArrayList();
while (rs.next()) {
int id = rs.getInt(1);
String nome = rs.getString(2);
String endereco = rs.getString(3);
String bairro = rs.getString(4);
String cidade = rs.getString(5);
String estado = rs.getString(6);
String cep = rs.getString(7);
String telefone = rs.getString(8);
list.add(new Contatos(id, nome, endereco, bairro, cidade, estado, cep, telefone));
}
return list;
} catch (Exception sqle) {
throw new ContatosDAOException(sqle);
} finally {
ConnectContatosFactory.closeConnection(conn, ps, rs);
}
}
public void atualizar(Contatos contato) throws ContatosDAOException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void excluir(Contatos contato) throws ContatosDAOException {
throw new UnsupportedOperationException("Not supported yet.");
}
}
package Dao;
public class ContatosDAOException extends Exception{
public ContatosDAOException() {
}
public ContatosDAOException(String arg) {
super(arg);
}
public ContatosDAOException(Throwable arg) {
super(arg);
}
public ContatosDAOException(String arg,Throwable arg1){
super(arg,arg1);
}
}
package Dao;
import Model.Contatos;
import java.util.List;
public interface InterfaceContatosDAO {
void atualizar (Contatos contato) throws ContatosDAOException;
void excluir (Contatos contato) throws ContatosDAOException;
void salvar (Contatos contato)throws ContatosDAOException;
List listarTodos()throws ContatosDAOException ;
}
package Model;
public class Contatos {
/** Declaração de Atributos, Observe que so os mesmos campos existente
* Na tabela que criamos no MySQL, os atributos devem ser declarados privados
*/
private int id;
private String nome;
private String endereco;
private String bairro;
private String cidade;
private String estado;
private String cep;
private String telefone;
public Contatos() {
// Construtor da classe vazio
}
public Contatos(int id, String nome, String endereco, String bairro, String cidade, String estado, String cep, String telefone) {
//Construtor recebendo parâmetros
this.nome = nome;
this.endereco = endereco;
this.bairro = bairro;
this.cidade = cidade;
this.estado = estado;
this.cep = cep;
this.telefone = telefone;
}
// Getters e Setters
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/NUTECBD</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">debian23</property>
</session-factory>
</hibernate-configuration>