Jdbc struts 2 retornando null [Resolvido]

Estou começando a estudar Struts 2 eu estou fazendo um teste e um crud simples eu queria saber onde estar o meu erro, vou postar o erro e as classes. Eu preciso muita dessa dica desde já muito obrigado.

java.lang.NullPointerException
br.com.FuncionariosDAO.FuncionariosDAO.adciona(FuncionariosDAO.java:30)
br.com.FuncionariosDAO.FuncionarioManager.criar(FuncionarioManager.java:17)
br.com.Funcionarios.Action.FuncionarioAction.create(FuncionarioAction.java:47)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)


package br.com.Funcionarios.Connecty;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {
public static Connection getConnection() throws SQLException{
	try{
		Class.forName("com.mysql.jdbc.Driver");
		return DriverManager.getConnection("jdbc:mysql://localhost/empresa","root","");
		
	}catch(ClassNotFoundException e){
		throw new SQLException (e.getMessage());
	}
}
}


public class FuncionariosDAO {

	private Connection connection;

	public FuncionariosDAO(Connection con) {
		this.connection = con;
	}
	
	public FuncionariosDAO() throws SQLException {
		this.connection = ConnectionFactory.getConnection();

	}

	public void adciona(Funcionarios funcionarios) throws SQLException {
		String sql = "INSERT INTO FUNCIONARIOS (FUNCIONARIOS_NOME, FUNCIONARIOS_SENHA, FUNCIONARIOS_SOBRENOME) "
				+ "VALUES(?,?,?,?)";
		PreparedStatement statement = connection.prepareStatement(sql);
		statement.setString(1, funcionarios.getFUNCIONARIOS_NOME());
		statement.setString(2, funcionarios.getFUNCIONARIOS_SENHA());
		statement.setString(3, funcionarios.getFUNCIONARIOS_SOBRENOME());
		statement.execute();
		statement.close();
	}

	public List<Funcionarios> getList() throws SQLException {

		PreparedStatement statement = this.connection
				.prepareStatement("SELECT * FROM FUNCIONARIOS");

		ResultSet rs = statement.executeQuery();

		List<Funcionarios> funcionarios = new ArrayList<Funcionarios>();
		while (rs.next()) {
			Funcionarios funcionario = new Funcionarios();
			funcionario.setFUNCIONARIOS_CAD(rs.getLong("FUNCIONARIOS_CAD"));
			funcionario.setFUNCIONARIOS_NOME(rs.getString("FUNCIONARIOS_NOME"));
			funcionario.setFUNCIONARIOS_SENHA(rs.getString("FUNCIOnARIOS_SENHA"));
			funcionario.setFUNCIONARIOS_SOBRENOME(rs.getString("FUNCIONARIOS_SOBRENOME"));
			funcionarios.add(funcionario);
		}
		rs.close();
		statement.close();

		return funcionarios;
	}

	public void altera(Funcionarios funcionarios) throws SQLException {
		PreparedStatement statement = connection.prepareStatement("UPDATE"
				+ "FUNCIONARIOS SET FUNCIONARIOS_NOME=?,"
				+ "FUNCIONARIOS_SENHA=?, FUNCIONARIOS_SOBRENOME=?");
		statement.setString(1, funcionarios.getFUNCIONARIOS_NOME());
		statement.setString(2, funcionarios.getFUNCIONARIOS_SENHA());
		statement.setString(3, funcionarios.getFUNCIONARIOS_SOBRENOME());
		statement.execute();
		statement.close();
	}

	public Funcionarios procura(Long id) throws SQLException {
		PreparedStatement statement = this.connection
				.prepareStatement("SELECT * FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=?");
		Funcionarios funcionarios = new Funcionarios();
		statement.setLong(1, id);
		ResultSet rs = statement.executeQuery();

		while (rs.next()) {

			funcionarios.setFUNCIONARIOS_CAD(rs.getLong("FUNCIONARIOS_CAD"));
			funcionarios.setFUNCIONARIOS_NOME(rs.getString("FUNCIONARIOS_NOME"));
			funcionarios.setFUNCIONARIOS_SOBRENOME(rs.getString("FUNCIONARIOS_SOBRENOME"));
			funcionarios.setFUNCIONARIOS_SENHA(rs.getString("FUNCIONARIOS_SENHA"));

		}
		return funcionarios;
	}

	public void remove(Funcionarios funcionarios) throws SQLException {
		PreparedStatement statement = this.connection
				.prepareStatement("DELETE FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=? ");
		statement.setLong(1, funcionarios.getFUNCIONARIOS_CAD());
		statement.execute();
		statement.close();
	}
}

package br.com.FuncionariosDAO;

import java.sql.SQLException;
import java.util.List;

import br.com.Funcionarios.Funcionarios;

public class FuncionarioManager {

	public static List<Funcionarios> getFuncionarios() throws SQLException {
		return search(new Funcionarios());
	}

	public static void criar(Funcionarios funcionarios) throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {
			funcionariosDAO.adciona(funcionarios);
		} catch (SQLException e) {

		}
	}

	public static void delete(Funcionarios funcionarios) throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {
			funcionariosDAO.remove(funcionarios);
		} catch (SQLException e) {

		}
	}

	public static Funcionarios procura(Long funcionarioId)
			throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {

			return funcionariosDAO.procura(funcionarioId);
		} catch (SQLException e) {
			System.out.println("ERRADO" + e);
		}
		return null;
	}

	public static void upddate(Funcionarios funcionarios) throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();

		try {
			funcionariosDAO.altera(funcionarios);
		} catch (SQLException e) {
			System.out.println("UPDATE ERRADO" + e);
		}
	}

	private static List<Funcionarios> search(Funcionarios funcionarios)
			throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {
			return funcionariosDAO.getList();
		} catch (SQLException e) {
			System.out.println("LISTA ERRADO" + e);
		}

		return null;
	}

	

}

package br.com.FuncionariosDAO;

import java.sql.SQLException;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;

public class DAOFactory {
	private String databaseType;

	private static DAOFactory instance;
	static {
		instance = new DAOFactory();
	}

	private DAOFactory() {
		ServletContext servletContext = ServletActionContext
				.getServletContext();
		databaseType = servletContext.getInitParameter("dbType");

	}

	public static DAOFactory getInstance() {
		return instance;
	}

	public FuncionarioIn getfuncionarioIn() throws SQLException {
		if ("mysql".equalsIgnoreCase(databaseType)) {
			return (FuncionarioIn) new FuncionariosDAO();
		} else if ("oracle".equalsIgnoreCase(databaseType)) {
			// return new EmployeeDAOOracleImpl();
		} else if ("mssql".equalsIgnoreCase(databaseType)) {
			// return new EmployeeDAOMsSQLImpl();
		}
		return null;
	}
}

Rode o sistema em modo degug e verifique se o objeto de connection do seu DAO está vindo null (é o que pareçe).
Antes de rodar tudo via Struts2, tente rodar o DAO com uma classe simples com um main (ou use o JUnit). Assim seus testes serão mais rápidos.

Mas, na boa, se você não tiver fortes motivo para usar JDBC puro no projeto porque não usar Hibernate?

Há um plugin para Struts2, o Full Hibernate Plugin, que reduz imensamente o trabalho de uso do Hibernate com Struts2, inclusive oferendo o uso transparente do Hibernate Validator.
http://cwiki.apache.org/S2PLUGINS/full-hibernate-plugin.html

Espero ter ajudado. Um forte abraço.

vlw Yoshiriro mas rodei em modo debug eo objeto connections não esta nulo ele esta trazendo a conexão certinha o que esta nulo

esta o funcionarios na parte de adiciona o valor mas não achei o motivo, se vcs poderem me ajudar agradeço.

public void adciona(Funcionarios funcionarios) throws SQLException {
String sql = "INSERT INTO FUNCIONARIOS (FUNCIONARIOS_NOME, FUNCIONARIOS_SENHA, FUNCIONARIOS_SOBRENOME) "
+ “VALUES(?,?,?,?)”;
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, funcionarios.getFUNCIONARIOS_NOME());
statement.setString(2, funcionarios.getFUNCIONARIOS_SENHA());
statement.setString(3, funcionarios.getFUNCIONARIOS_SOBRENOME());
statement.execute();
statement.close();
}

pq vc tem 4 “?” no “Values” se passa somente 3 parâmetros

Barney estava errado mas continua o erro muito obrigado pelo toque, ja tinha resolvido um problema desse em algum fórum eu mesmo cai nesse vlw amigo,

vamos continuar tentando achar o erro.

Manda o código da tua Action.

eu tinha esquecido da action


import java.sql.SQLException;
import java.util.List;


import br.com.Funcionarios.Funcionarios;
import br.com.FuncionariosDAO.FuncionarioManager;

import com.opensymphony.xwork2.ActionSupport;


public class FuncionarioAction extends ActionSupport   {

	private static final long serialVersionUID = 1L;

	private Funcionarios funcionario;

	private Long funcionarioId;

	private List<Funcionarios> funcionarios;

	
	

	public List<Funcionarios> getFuncionarios() {
		return funcionarios;
	}

	public Funcionarios getFuncionario() {
		return funcionario;
	}

	public void setFuncionarios(Funcionarios funcionarios) {
		this.funcionario = funcionarios;
	}

	public void setFuncionario(List<Funcionarios> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public String list() throws SQLException {
		funcionarios = FuncionarioManager.getFuncionarios();
		return INPUT;
	}

	public String create() throws SQLException {
		FuncionarioManager.criar((Funcionarios) funcionario);
		return SUCCESS;
	}

	public String edit() throws SQLException {
		return SUCCESS;
	}

	public String update() throws SQLException {
		FuncionarioManager.upddate(funcionario);
		funcionarios = FuncionarioManager.getFuncionarios();
		return SUCCESS;
	}

	public String delete() throws SQLException {
		FuncionarioManager.delete(funcionario);
		funcionarios = FuncionarioManager.getFuncionarios();
		return SUCCESS;
	}

	public Long getFuncionarioId() {
		return funcionarioId;
	}

	public void setFuncionarioId(Long funcionarioId) {
		this.funcionarioId = funcionarioId;
	}

}

Só pra clarear, é na chamada de qual método da Action que dá o erro?

Na action create

public String create() throws SQLException {
		FuncionarioManager.criar((Funcionarios) funcionario);
		return SUCCESS;

Amigo, ocorreuq eu no Struts2 seus gets e sets devem bater 100% com o nome do objeto. Inclusive o nome do parâmetro nos sets deve ser igual.

Se seu objeto é

seus gets e sets devem ser:

e

Se for fazer o Debug na Action vais ver que seu objeto funcionario chega null no método create da Action.

E outra: há uma máprática TERRIVEL no seu código: você abriu “try-catch” sem por nada dentro dos catch. Se não queria tratar, por que simplesmente não usou a palavra throws na assinatura do método? Do jeito que está, podem ocorrer erros que você nunca vai identificar!

E outra: é padrão usar nomes de POJOs de entidade no SINGULAR. Ou seja, seria melhor sua classe se chamar Funcionario e não Funcionarios, ok?

Obrigado pelas dicas aprendi bastante principalmente do try, eu alterei as classes.

mas continua dando problema muito obrigado pela ajuda

package br.com.FuncionariosDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.Funcionarios.Funcionarios;
import br.com.Funcionarios.Connecty.*;

public class FuncionariosDAO {

	private Connection connection;

	public FuncionariosDAO(Connection con) {
		this.connection = con;
	}
	
	public FuncionariosDAO() throws SQLException {
		this.connection = ConnectionFactory.getConnection();

	}

	public void adciona(Funcionarios funcionario) throws SQLException {
		String sql = "INSERT INTO funcionarios (FUNCIONARIOS_NOME, FUNCIONARIOS_SENHA, FUNCIONARIOS_SOBRENOME) "
				+ "VALUES(?,?,?)";
		PreparedStatement statement = connection.prepareStatement(sql);
		statement.setString(1, funcionario.getFuncionario_nome());
		statement.setString(2, funcionario.getFuncionario_senha());
		statement.setString(3, funcionario.getFuncionario_sobrenome());
		statement.execute();
		statement.close();
	}

	public List<Funcionarios> getList() throws SQLException {

		PreparedStatement statement = this.connection
				.prepareStatement("SELECT * FROM FUNCIONARIOS");

		ResultSet rs = statement.executeQuery();

		List<Funcionarios> funcionarios = new ArrayList<Funcionarios>();
		while (rs.next()) {
			Funcionarios funcionario = new Funcionarios();
			funcionario.setFuncionario_cad(rs.getLong("funcionario_cad"));
			funcionario.setFuncionario_nome(rs.getString("funcionario_nome"));
			funcionario.setFuncionario_senha(rs.getString("funcionario_senha"));
			funcionario.setFuncionario_sobrenome(rs.getString("funcionario_sobrenome"));
			funcionarios.add(funcionario);
		}
		rs.close();
		statement.close();

		return funcionarios;
	}

	public void altera(Funcionarios funcionario) throws SQLException {
		PreparedStatement statement = connection.prepareStatement("UPDATE"
				+ "FUNCIONARIOS SET FUNCIONARIOS_NOME=?,"
				+ "FUNCIONARIOS_SENHA=?, FUNCIONARIOS_SOBRENOME=?");
		statement.setString(1, funcionario.getFuncionario_nome());
		statement.setString(2, funcionario.getFuncionario_senha());
		statement.setString(3, funcionario.getFuncionario_sobrenome());
		statement.execute();
		statement.close();
	}

	public Funcionarios procura(long id) throws SQLException {
		PreparedStatement statement = this.connection
				.prepareStatement("SELECT * FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=?");
		Funcionarios funcionarios = new Funcionarios();
		statement.setLong(1, id);
		ResultSet rs = statement.executeQuery();

		while (rs.next()) {

			funcionarios.setFuncionario_cad(rs.getLong("FUNCIONARIOS_CAD"));
			funcionarios.setFuncionario_nome(rs.getString("FUNCIONARIOS_NOME"));
			funcionarios.setFuncionario_sobrenome(rs.getString("FUNCIONARIOS_SOBRENOME"));
			funcionarios.setFuncionario_senha(rs.getString("FUNCIONARIOS_SENHA"));

		}
		return funcionarios;
	}

	public void remove(Funcionarios funcionario) throws SQLException {
		PreparedStatement statement = this.connection
				.prepareStatement("DELETE FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=? ");
		statement.setLong(1, funcionario.getFuncionario_cad());
		statement.execute();
		statement.close();
	}
}
package br.com.FuncionariosDAO;

import java.sql.SQLException;
import java.util.List;

import br.com.Funcionarios.Funcionarios;

public class FuncionarioManager {

	public static List<Funcionarios> getFuncionarios() throws SQLException {
		return search(new Funcionarios());
	}

	public static void criar(Funcionarios funcionario) throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {
			funcionariosDAO.adciona(funcionario);
		} catch (SQLException e) {

		}
	}

	public static void delete(Funcionarios funcionario) throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {
			funcionariosDAO.remove(funcionario);
		} catch (SQLException e) {

		}
	}

	public static Funcionarios procura(Long funcionarioId)
			throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {

			return funcionariosDAO.procura(funcionarioId);
		} catch (SQLException e) {
			System.out.println("ERRADO" + e);
		}
		return null;
	}

	public static void upddate(Funcionarios funcionario) throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();

		try {
			funcionariosDAO.altera(funcionario);
		} catch (SQLException e) {
			System.out.println("UPDATE ERRADO" + e);
		}
	}

	private static List<Funcionarios> search(Funcionarios funcionario)
			throws SQLException {
		FuncionariosDAO funcionariosDAO = new FuncionariosDAO();
		try {
			return funcionariosDAO.getList();
		} catch (SQLException e) {
			System.out.println("LISTA ERRADO" + e);
		}

		return null;
	}

	

}
package br.com.Funcionarios.Action;

import java.sql.SQLException;
import java.util.List;


import br.com.Funcionarios.Funcionarios;
import br.com.FuncionariosDAO.FuncionarioManager;

import com.opensymphony.xwork2.ActionSupport;


public class FuncionarioAction extends ActionSupport   {

	private static final long serialVersionUID = 1L;

	private Funcionarios funcionario;

	private Long funcionarioId;

	private List<Funcionarios> funcionarios;

	
	

	public List<Funcionarios> getFuncionarios() {
		return funcionarios;
	}

	public Funcionarios getFuncionario() {
		return funcionario;
	}

	public void setFuncionarios(Funcionarios funcionario) {
		this.funcionario = funcionario;
	}

	public void setFuncionario(List<Funcionarios> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public String list() throws SQLException {
		funcionarios = FuncionarioManager.getFuncionarios();
		return INPUT;
	}

	public String create() throws SQLException {
		FuncionarioManager.criar(funcionario);
		return SUCCESS;
	}

	public String edit() throws SQLException {
		return SUCCESS;
	}

	public String update() throws SQLException {
		FuncionarioManager.upddate(funcionario);
		funcionarios = FuncionarioManager.getFuncionarios();
		return SUCCESS;
	}

	public String delete() throws SQLException {
		FuncionarioManager.delete(funcionario);
		funcionarios = FuncionarioManager.getFuncionarios();
		return SUCCESS;
	}

	public Long getFuncionarioId() {
		return funcionarioId;
	}

	public void setFuncionarioId(Long funcionarioId) {
		this.funcionarioId = funcionarioId;
	}

}

Aparentemente está tudo OK, mas falta você mandar o código do seu JSP para darmos uma olhadinha.

Alterei minha action e minha classe impl e agora esta inserindo no banco só que null e estou usando uma interface.



package br.com.FuncionariosDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

import br.com.Funcionarios.Funcionarios;
import br.com.Funcionarios.Connecty.*;

public class FuncionariosDAO extends ActionSupport implements FuncionarioIn {

	private static final long serialVersionUID = 1L;

	private Connection connection;

	public FuncionariosDAO(Connection con) {
		this.connection = con;
	}

	public FuncionariosDAO() {
		try {
			this.connection = ConnectionFactory.getConnection();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}

	}

	public void createFuncionario(Funcionarios funcionario) throws SQLException {
		String sql = "INSERT INTO funcionarios (FUNCIONARIOS_NOME, FUNCIONARIOS_SENHA, FUNCIONARIOS_SOBRENOME) "
				+ "VALUES(?,?,?)";
		PreparedStatement statement = connection.prepareStatement(sql);
		statement.setString(1, funcionario.getFuncionario_nome());
		statement.setString(2, funcionario.getFuncionario_senha());
		statement.setString(3, funcionario.getFuncionario_sobrenome());
		statement.execute();
		statement.close();
	}

	public List<Funcionarios> getList() throws SQLException {

		PreparedStatement statement = this.connection
				.prepareStatement("SELECT * FROM FUNCIONARIOS");

		ResultSet rs = statement.executeQuery();

		List<Funcionarios> funcionarios = new ArrayList<Funcionarios>();
		while (rs.next()) {
			Funcionarios funcionario = new Funcionarios();
			funcionario.setFuncionario_cad(rs.getLong("funcionarios_cad"));
			funcionario.setFuncionario_nome(rs.getString("funcionarios_nome"));
			funcionario
					.setFuncionario_senha(rs.getString("funcionarios_senha"));
			funcionario.setFuncionario_sobrenome(rs
					.getString("funcionarios_sobrenome"));
			funcionarios.add(funcionario);
		}
		rs.close();
		statement.close();

		return funcionarios;
	}

	public void updateFuncionarios(Funcionarios funcionario)
			throws SQLException {
		PreparedStatement statement = connection
				.prepareStatement("UPDATE FUNCIONARIOS SET FUNCIONARIOS_NOME=?, FUNCIONARIOS_SENHA=?, FUNCIONARIOS_SOBRENOME=?");
		statement.setString(1, funcionario.getFuncionario_nome());
		statement.setString(2, funcionario.getFuncionario_senha());
		statement.setString(3, funcionario.getFuncionario_sobrenome());
		statement.execute();
		statement.close();
	}

	public Funcionarios getFuncionarios(Long funcionarioId) throws SQLException {
		PreparedStatement statement = this.connection
				.prepareStatement("SELECT * FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=?");
		Funcionarios funcionarios = new Funcionarios();
		statement.setLong(1, funcionarioId);
		ResultSet rs = statement.executeQuery();

		while (rs.next()) {

			funcionarios.setFuncionario_cad(rs.getLong("FUNCIONARIOS_CAD"));
			funcionarios.setFuncionario_nome(rs.getString("FUNCIONARIOS_NOME"));
			funcionarios.setFuncionario_sobrenome(rs
					.getString("FUNCIONARIOS_SOBRENOME"));
			funcionarios.setFuncionario_senha(rs
					.getString("FUNCIONARIOS_SENHA"));

		}
		return funcionarios;
	}

	public void deleteEmpregado(Long funcionarioId) throws SQLException {
		PreparedStatement statement = this.connection
				.prepareStatement("DELETE FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=? ");
		statement.setLong(1, funcionarioId);
		statement.execute();
		statement.close();
	}

	public List<Funcionarios> listfuncionarios()
			throws SQLException {
		PreparedStatement statement = this.connection
				.prepareStatement("SELECT * FROM FUNCIONARIOS");

		ResultSet rs = statement.executeQuery();

		List<Funcionarios> funcionarios = new ArrayList<Funcionarios>();
		while (rs.next()) {
			Funcionarios funcionario = new Funcionarios();
			funcionario.setFuncionario_cad(rs.getLong("funcionarios_cad"));
			funcionario.setFuncionario_nome(rs.getString("funcionarios_nome"));
			funcionario
					.setFuncionario_senha(rs.getString("funcionarios_senha"));
			funcionario.setFuncionario_sobrenome(rs
					.getString("funcionarios_sobrenome"));
			funcionarios.add(funcionario);
		}
		rs.close();
		statement.close();

		return funcionarios;

	}

	
	

	
}


package br.com.Funcionarios.Action;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;


import br.com.Funcionarios.Funcionarios;
import br.com.FuncionariosDAO.FuncionarioIn;

import br.com.FuncionariosDAO.FuncionariosDAO;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;


public class FuncionarioAction extends ActionSupport   {

	private static final long serialVersionUID = 1L;

	

	private Funcionarios funcionario = new Funcionarios();

	private Long funcionarioId;

	private List<Funcionarios> funcionarios = new ArrayList<Funcionarios>();

    private FuncionarioIn funcionarioIn = new FuncionariosDAO();
	

	public List<Funcionarios> getFuncionarios() {
		return funcionarios;
	}

	public Funcionarios getFuncionario() {
		return funcionario;
	}

	public void setFuncionarios(Funcionarios funcionario) {
		this.funcionario = funcionario;
	}

	public void setFuncionario(List<Funcionarios> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public String list() throws SQLException {
		funcionarios = funcionarioIn.listfuncionarios();
		return SUCCESS;
	}

	public String create() throws SQLException {
		funcionarioIn.createFuncionario(funcionario);
		return SUCCESS;
	}

	public String edit() throws SQLException {
		return SUCCESS;
	}

	public String update() throws SQLException {
		HttpServletRequest request = (HttpServletRequest) ActionContext
		.getContext().get(ServletActionContext.HTTP_REQUEST);
     funcionarios = (List<Funcionarios>) funcionarioIn.getFuncionarios(Long.parseLong(request.getParameter("funcionarioId")));
		
		return SUCCESS;
	}

	public String delete() throws SQLException {
		HttpServletRequest request = (HttpServletRequest) ActionContext
		.getContext().get(ServletActionContext.HTTP_REQUEST);
		funcionarioIn.deleteEmpregado(Long.parseLong(request.getParameter("funcionarioId")));
		return SUCCESS;
	}

	public Long getFuncionarioId() {
		return funcionarioId;
	}

	public void setFuncionarioId(Long funcionarioId) {
		this.funcionarioId = funcionarioId;
	}

}

package br.com.FuncionariosDAO;

import java.sql.SQLException;
import java.util.List;

import br.com.Funcionarios.Funcionarios;



public interface FuncionarioIn {
	public void createFuncionario(Funcionarios funcionario) throws SQLException;
	public void updateFuncionarios(Funcionarios funcionario) throws SQLException ;
	public Funcionarios getFuncionarios(Long funcionarioId) throws SQLException;
	public void deleteEmpregado(Long funcionarioId) throws SQLException;
	public List<Funcionarios> listfuncionarios() throws SQLException; 
	
}

JSP


<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Lista de Funcionário</title>
<style type="text/css">@import url(css/main.css);</style>
</head>
<body>
<div id="global">
	<h3>Adciona novo Funcionario</h3>
	<s:form action="Funcionario_create">
    	<s:textfield label="Nome" key="funcionario_nome"/>
    	<s:textfield label="Sobre Nome" key="funcionario_sobrenome"/>
    	<s:textfield label="Senha" key="funcionario_senha"/>
    	<s:submit/>
	</s:form>
	<hr/>
	<table style="width:100%;text-align:left">
	<tr>
		<th>Empregado Id</th>
		<th>Nome</th>
		<th>Sobre Nome</th>
		<th>Senha</th>
		<th>Edit</th>
		<th>Delete</th>
	</tr>
	<s:iterator value="funcionarios" status="rowstatus">
	<tr>
    	<td><s:property value="funcionario_cad"/></td>
    	<td><s:property value="funcionario_nome"/></td>
    	<td><s:property value="funcionario_sobrenome"/></td>
    	<td><s:property value="funcionario_senha"/></td>
    	<td>
    		<s:url id="editUrl" value="Funcionario_edit.action">
                <s:param name="funcionarioId" value="id"/>
            </s:url>
            <s:a href="%{editUrl}">Edit</s:a>
        </td>    
    	<td>
    		<s:url id="deleteUrl" value="Funcionario_delete.action">
                <s:param name="funcionarioId" value="id"/>
            </s:url>
            <s:a href="%{deleteUrl}">Delete</s:a>
        </td>    
  	</tr>
	</s:iterator>
	</table>
</div>
</body>
</html>

Amigo, chamou-me a atenção você faz assim:

<s:textfield label=“Nome” key=“funcionario_nome”/>

Por que usou “key” ao invés de “name”? E porque “funcionario_nome” e não “funcionario.nome”?

alterei mas continua inserindo null eo funcionario_nome é como esta na POJO não é isso?

private Long funcionario_cad;
private String funcionario_nome;
private String funcionario_sobrenome;
private String funcionario_senha;

<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
	<head>
		<title>Lista de Funcionário</title>
		<style type="text/css">@import url(css/main.css);</style>
	</head>
	<body>
		<div id="global">
			<h3>
				Adciona novo Funcionario
			</h3>
			<s:form action="Funcionario_create">
				<s:textfield label="Nome" name="funcionario_nome" />
				<s:textfield label="Sobre Nome" name="funcionario_sobrenome" />
				<s:textfield label="Senha" name="funcionario_senha" />
				<s:submit />
			</s:form>
			<hr />
			<table style="width:100%;text-align:left">
				<tr>
					<th>
						Empregado Id
					</th>
					<th>
						Nome
					</th>
					<th>
						Sobre Nome
					</th>
					<th>
						Senha
					</th>
					<th>
						Edit
					</th>
					<th>
						Delete
					</th>
				</tr>
				<s:iterator value="funcionarios" status="userStatus">
					<tr
						class="<s:if test="#userStatus.odd == true ">odd</s:if><s:else>even</s:else>">
						<td>
							<s:property value="funcionario_cad" />
						</td>
						<td>
							<s:property value="funcionario_nome" />
						</td>
						<td>
							<s:property value="funcionario_sobrenome" />
						</td>
						<td>
							<s:property value="funcionario_senha" />
						</td>
						<td>
							<s:url id="editUrl" value="Funcionario_edit">
								<s:param name="funcionarioId" value="%{funcionarioId}" />
							</s:url>
							<s:a href="%{editUrl}">Edit</s:a>
						</td>
						<td>
							<s:url id="deleteURL" action="Funcionario_delete">
								<s:param name="funcionarioId" value="%{funcionarioId}"></s:param>
							</s:url>
							<s:a href="%{deleteURL}">Delete</s:a>
						</td>
						</td>
					</tr>
				</s:iterator>
			</table>
		</div>
	</body>
</html>

Se seu objeto funcionario da Action é do tipo Funcionarios que possui um atributo nome,
então o correto é funcionario.nome com certeza.

funfou vlw amigo jyoshiriro foi um grande professor struts 1 eu consigo fazer muita coisa mas o struts ainda um mistério mas estou evoluindo
eu alterei isso


<s:textfield label="Nome" name="funcionario.funcionario_nome" />
				<s:textfield label="Sobre Nome" name="funcionario.funcionario_sobrenome" />
				<s:textfield label="Senha" name="funcionario.funcionario_.senha" />

agora só falta consertar o delete eo update que ta dando esse erro

ava.lang.NumberFormatException: null
java.lang.Long.parseLong(Unknown Source)
java.lang.Long.parseLong(Unknown Source)
br.com.Funcionarios.Action.FuncionarioAction.delete(FuncionarioAction.java:77)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:

Bem, eu achei estranho isso de

<s:textfield label=“Nome” name=“funcionario.funcionario_nome” />

pois eu faria apenas

<s:textfield label=“Nome” name=“funcionario.nome” />

Mas, se funcionou, tudo bem ^^’

Quanto a esse novo erro, parece que o objeto da chave primária não está chegando na Action ou está vindo um valor ilegal (String ao invés de int, por exemplo)

Agora esta tudo resolvido muito obrigado pela ajuda aprendi bastante o erro era que tinha um long em ves de Long