[b]Ola pessoal, estou tendo problemas com a implementação de um sistema.
Bati a cabeça o final de semana inteiro e não consegui resolvê-lo. Espero que possam me ajudar.
Estou trabalhando com alguns Design Patterns nos codigos, requisito do sistema, criei as seguintes classes:
FuncionarioBean
package Controller;
import Dao.FuncionarioDAO;
import FactoryMethod.FactoryDAO;
import Interface.IFuncionarioDAO;
import Model.Funcionario;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.swing.Action;
/**
*
* @author VIRTUALWEB
*/
@ManagedBean
@SessionScoped
public class FuncionarioBean implements Serializable{
// Contrutora da Classe
public FuncionarioBean() {
}
private Funcionario funcionario = new Funcionario();
private List<Funcionario> listaFuncionario = new ArrayList();
// Getters e Setters
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public List<Funcionario> getListaFuncionario() {
return listaFuncionario;
}
public void setListaFuncionario(List<Funcionario> listaFuncionario) {
this.listaFuncionario = listaFuncionario;
}
// Métodos
public void salvar(){
IFuncionarioDAO dao = (IFuncionarioDAO) FactoryDAO.creatObject(Funcionario.class);
dao.Salvar(funcionario);
listaFuncionario.add(funcionario);
funcionario = new Funcionario();
}
}
FuncionarioDAO
package Dao;
import FactoryMethod.FactoryConnection;
import Interface.IFuncionarioDAO;
import Model.Funcionario;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
public class FuncionarioDAO implements IFuncionarioDAO {
private Connection conexao;
private PreparedStatement comando;
private ResultSet rset;
private String tabela_bd = "tb_funcionario";
/**
* Construtora da Classe que inicializa a conexao com
* o banco de dados mysql através do parâmetro zero.
*/
public FuncionarioDAO(){
this.conexao = FactoryConnection.conexao(0);
}
/**
* Método para inserir funcionários no banco de dados
*/
@Override
public void Salvar(Funcionario F) {
// String SQL para inserção no bd
String sql = " INSERT "
+ " INTO " + this.tabela_bd
+ "( HIS_ID, "
+ " CAR_ID, "
+ " EMP_ID, "
+ " ADM_NOME, "
+ " ADM_SOBRENOME, "
+ " ADM_DTNASCIMENTO, "
+ " ADM_EMAIL, "
+ " ADM_TELEFONE, "
+ " ADM_LOGIN, "
+ " ADM_SENHA, "
+ " ADM_NIVEL ) "
+ " VALUES(?,?,?,?,?,?,?,?,?,?,?)";
try {
this.comando = this.conexao.prepareStatement(sql);
this.comando.setInt (1, F.getIdHistorico());
this.comando.setInt (2, F.getIdCargo());
this.comando.setInt (3, F.getIdEmpresa());
this.comando.setString(4, F.getNome());
this.comando.setString(5, F.getSobreNome());
this.comando.setString(6, F.getNascimento());
this.comando.setString(7, F.getEmail());
this.comando.setString(8, F.getTelefone());
this.comando.setString(9, F.getLogin());
this.comando.setString(10, F.getSenha());
this.comando.setInt (11, F.getNivel());
this.comando.execute();
this.comando.close();
JOptionPane.showMessageDialog(null,"Funcionario inserido com sucesso!");
} catch (SQLException u) {
JOptionPane.showMessageDialog(null,"Erro ao inserir o Funcionário!");
throw new RuntimeException(u);
}
}
@Override
public void Editar(Funcionario F) {
String sql = " UPDATE " + this.tabela_bd
+ " SET "
+ " HIS_ID = ?, "
+ " CAR_ID = ?, "
+ " EMP_ID = ?, "
+ " ADM_NOME = ?, "
+ " ADM_SOBRENOME = ?, "
+ " ADM_DTNASCIMENTO = ?, "
+ " ADM_EMAIL = ?, "
+ " ADM_TELEFONE = ?, "
+ " ADM_LOGIN = ?, "
+ " ADM_SENHA = ?, "
+ " ADM_NIVEL = ? "
+ " WHERE ADM_ID = ? ";
try {
this.comando = this.conexao.prepareStatement(sql);
this.comando.setInt (1, F.getIdHistorico());
this.comando.setInt (2, F.getIdCargo());
this.comando.setInt (3, F.getIdEmpresa());
this.comando.setString(4, F.getNome());
this.comando.setString(5, F.getSobreNome());
this.comando.setString(6, F.getNascimento());
this.comando.setString(7, F.getEmail());
this.comando.setString(8, F.getTelefone());
this.comando.setString(9, F.getLogin());
this.comando.setString(10, F.getSenha());
this.comando.setInt (11, F.getNivel());
this.comando.setInt (12, F.getIdFuncionario());
this.comando.execute();
this.comando.close();
JOptionPane.showMessageDialog(null,"Funcionario Editado com sucesso!");
} catch (SQLException u) {
JOptionPane.showMessageDialog(null,"Erro ao editar o Funcionário!");
throw new RuntimeException(u);
}
}
/**
* Metodo Excluir com utilização de Store Procedures
* @param F
*/
@Override
public void Excluir(Funcionario F) {
CallableStatement cs;
try {
cs = this.conexao.prepareCall ( "{call excluir_Funcionario(?)}" );
cs.setInt(1, F.getIdFuncionario());
cs.execute();
cs.close();
JOptionPane.showMessageDialog(null,"Funcionario Ecluído com sucesso!");
}
catch (SQLException ex) {
Logger.getLogger(FuncionarioDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Método que cria uma lista dos funcionários cadastrados no sistema.
* @return Lista de funcionarios
*/
@Override
public List<Funcionario> Listar(){
String sql = "SELECT * FROM " + this.tabela_bd;
List<Funcionario> ListaFuncionario = new ArrayList<Funcionario>();
try {
this.comando = this.conexao.prepareStatement(sql);
this.rset = this.comando.executeQuery();
//Enquanto existir dados no banco de dados, faça
while(this.rset.next()){
Funcionario F = new Funcionario();
F.setIdFuncionario(this.rset.getInt("ADM_ID"));
F.setIdCargo(this.rset.getInt("CAR_ID"));
F.setIdHistorico(this.rset.getInt("HIS_ID"));
F.setIdEmpresa(this.rset.getInt("EMP_ID"));
F.setNome(this.rset.getString("ADM_NOME"));
F.setSobreNome(this.rset.getString("ADM_SOBRENOME"));
F.setNascimento(this.rset.getString("ADM_DTNASCIMENTO"));
F.setEmail(this.rset.getString("ADM_EMAIL"));
F.setTelefone(this.rset.getString("ADM_TELEFONE"));
F.setLogin(this.rset.getString("ADM_LOGIN"));
F.setSenha(this.rset.getString("ADM_SENHA"));
F.setNivel(this.rset.getInt ("ADM_NIVEL"));
//Adicionando os dados do funcionário a lista de funcionarios
ListaFuncionario.add(F);
}
}catch (SQLException u) {
JOptionPane.showMessageDialog(null,"Erro ao Ler os dados do Funcionário!");
throw new RuntimeException(u);
}
return ListaFuncionario;
}
@Override
public void Pesquisar(Funcionario F) {
}
}
IFuncionarioDAO
package Interface;
import Model.Funcionario;
import java.util.List;
public interface IFuncionarioDAO {
public void Salvar(Funcionario F);
public void Editar(Funcionario F);
public void Excluir(Funcionario F);
public void Pesquisar(Funcionario F);
List<Funcionario> Listar();
}
FactoryDAO - Cria a instancia de um objeto
package FactoryMethod;
/**
* Utiliza o Design Patterns Factory Method definindo uma maneira padrão
* de criar objetos.
*
* @author Livio Bruno de Oliveia
* @version 1.0
*/
public class FactoryDAO {
/**
* Método estático que retorna a instância de uma classe
* passada por parâmetro
* @param classobjeto classe a ser instanciada.
* @return instância da classe passada por parâmetro
*/
public static Object creatObject(Class classobjeto) {
try
{
Class cls = Class.forName("Dao." + classobjeto.getSimpleName() + "DAO");
return cls.getConstructor().newInstance();
}
catch(Exception e)
{
}
return null;
}
}
Index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:panelGrid >
<h:outputText value="id historico" />
<h:inputText value="#{funcionarioBean.funcionario.idHistorico}" />
<h:outputText value="id empresa" />
<h:inputText value="#{funcionarioBean.funcionario.idEmpresa}" />
<h:outputText value="id cargo" />
<h:inputText value="#{funcionarioBean.funcionario.idCargo}" />
<h:outputText value="nome" />
<h:inputText value="#{funcionarioBean.funcionario.nome}" />
<h:outputText value="sobrenome" />
<h:inputText value="#{funcionarioBean.funcionario.sobreNome}" />
<h:outputText value="Nascimento" />
<h:inputText value="#{funcionarioBean.funcionario.nascimento}" />
<h:outputText value="email" />
<h:inputText value="#{funcionarioBean.funcionario.email}" />
<h:outputText value="Telefone" />
<h:inputText value="#{funcionarioBean.funcionario.telefone}" />
<h:outputText value="login" />
<h:inputText value="#{funcionarioBean.funcionario.login}" />
<h:outputText value="senha" />
<h:inputText value="#{funcionarioBean.funcionario.senha}" />
<h:outputText value="nivel" />
<h:inputText value="#{funcionarioBean.funcionario.nivel}" />
<h:commandButton id="btnO" value="Enviar" type="submit" action="#{funcionarioBean.salvar}"/>
</h:panelGrid>
</h:form>
<h:panelGrid>
<h:dataTable id="tableFuncionario" value="#{funcionarioBean.listaFuncionario}" var="p" title="Pessoas Cadastradas" border="1" rows="10" >
<h:column>
<f:facet name="header">
<h:outputText value="NOME" />
</f:facet>
<h:outputText value="#{p.nome}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="SOBRENOME" />
</f:facet>
<h:outputText value="#{p.sobreNome}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Senha" />
</f:facet>
<h:outputText value="#{p.senha}"/>
</h:column>
</h:dataTable>
</h:panelGrid>
</h:body>
</html>
Bom estes são os código que julgo serem úteis para ajudar a resolver o problema.
PROBLEMA: Ao clicar no botão para castrar os dados no banco de dados recebo o erro:
rastreamento de pilha
javax.faces.el.EvaluationException: java.lang.NullPointerException
em
em com.sun.faces.application.ActionListenerImpl.processAction (ActionListenerImpl.java: 102)
em javax.faces.component.UICommand.broadcast (UICommand.java: 315)
em javax.faces.component.UIViewRoot.broadcastEvents (UIViewRoot.java: 794)
em javax.faces.component.UIViewRoot.processApplication (UIViewRoot.java: 1259)
em com.sun.faces.lifecycle.InvokeApplicationPhase.execute (InvokeApplicationPhase.java: 81)
em com.sun.faces.lifecycle.Phase.doPhase (Phase.java: 101)
em com.sun.faces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java: 118)
em javax.faces.webapp.FacesServlet.service (FacesServlet.java: 593)
em org.apache.catalina.core.StandardWrapper.service (StandardWrapper.java: 1550)
em org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java: 281)
em org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java: 175)
em org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java: 655)
em org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java: 595)
em org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java: 161)
em org.apache.catalina.connector.CoyoteAdapter.doService (CoyoteAdapter.java: 331)
em org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java: 231)
em com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call (ContainerMapper.java: 317)
em com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java: 195)
em com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java: 860)
em com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java: 757)
em com.sun.grizzly.http.ProcessorTask.process (ProcessorTask.java: 1056)
em com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java: 229)
em com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolChain.java: 137)
em com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java: 104)
em com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java: 90)
em com.sun.grizzly.http.HttpProtocolChain.execute (HttpProtocolChain.java: 79)
em com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java: 54)
em com.sun.grizzly.SelectionKeyContextTask.call (SelectionKeyContextTask.java: 59)
em com.sun.grizzly.ContextTask.run (ContextTask.java: 71)
em com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java: 532)
em com.sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java: 513)
em java.lang.Thread.run (Thread.java: 619)
Causada por: java.lang.NullPointerException
em Controller.FuncionarioBean.salvar (FuncionarioBean.java: 54)
em sun.reflect.NativeMethodAccessorImpl.invoke0 (Método nativo)
em sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 39)
em sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 25)
em java.lang.reflect.Method.invoke (Method.java: 597)
em com.sun.el.parser.AstValue.invoke (AstValue.java: 254)
em com.sun.el.MethodExpressionImpl.invoke (MethodExpressionImpl.java: 302)
em com.sun.faces.facelets.el.TagMethodExpression.invoke (TagMethodExpression.java: 105)
em
... 32 mais
Porém se eu barrar as linhas
IFuncionarioDAO dao = (IFuncionarioDAO) FactoryDAO.creatObject(Funcionario.class);
dao.Salvar(funcionario);
não é gerado nenhum erro…
Podem me ajudar? Desculpe todos os códigos…
Grato desde já.