jyoshiriro, obrigado pela sua resposta.
Em primeiro lugar, gostaria de comunicar-lhes que eu resolvi o problema (não sei ao certo como).
A minha nova classe Logable ficou como a seguinte (que anteriormente retornava um boolean, e agora um objeto Funcionario)
[code]abstract public class Logable {
public Connection connection;
public Logable(Connection connection){
this.connection = connection;
}
public Funcionario isAccessGranted(User user) throws SQLException{
try{
String sql = "SELECT * FROM tbl_funcionario WHERE login=? and password=?";
PreparedStatement stmt = this.connection.prepareStatement(sql);
stmt.setString(1,user.getUserLogin());
stmt.setString(2,user.getUserPassword());
ResultSet rs = stmt.executeQuery();
while(rs.next()){
Funcionario funcionario = new Funcionario();
funcionario.setMatricula(rs.getString("matricula"));
funcionario.setCpf(rs.getString("cpf"));
funcionario.setNome(rs.getString("nome"));
funcionario.setUserLogin("login");
funcionario.setUserPassword("password");
return funcionario;
}
return null;
}catch(SQLException e){
e.printStackTrace();
return null;
}
}
}[/code]
Agora na primeira ocorrência de um funcionário que seja válido, um novo objeto do tipo Funcionario é criado e populado dentro do método isAccessGranted da minha DAO Logable…
O objeto é retornado para a variável de referência (Funcionario) que chamou o método Logable.isAccessGranted a partir da minha Action LoginAction…
Segue abaixo a minha LoginAction
package br.com.search4help.action;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import br.com.search4help.dao.AdminDAO;
import br.com.search4help.jdbc.ConnectionFactory;
import br.com.search4help.model.Funcionario;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@ParentPackage("default")
public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private Funcionario funcionario;
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
private Connection connection;
@Action(value = "loginFuncionario", results = {
@Result(name = "ok", location = "/admin/index.jsp"),
@Result(name = "invalido", location = "/index.jsp") })
public String execute() throws SQLException {
try {
this.connection = ConnectionFactory.getConnection();
ActionContext.getContext().getSession().put("conexao", connection);
this.connection = (Connection) ActionContext.getContext()
.getSession().get("conexao");
funcionario = new AdminDAO(connection).isAccessGranted(funcionario);
if (this.funcionario != null) {
ActionContext.getContext().getSession().put("usuarioLogado",
funcionario);
System.out.println("funcionario registrado na sessão");
} else {
System.out.println("erro durante abertura de sessão");
return "invalido";
}
return "ok";
} catch (SQLException e) {
e.printStackTrace();
return "invalido";
}
}
}
Agora funciona…
Em segundo lugar, gostaria de comentar que pra mim a suas observações e dicas (jyoshiriro) são de grande valor… Estou começando a programar com struts 2 agora e é a primeira vez que tenho contato com uma framework… Gostaria de que sempre que meu código estiver fora dos design patterns, me avisem! É bom para criar o hábito de programar já no padrão… Gostaria até de uma referência de design patters para java J2EE… algum tutorial ou livro… existe?
Em terceiro, jyoshiriro
pode me exemplificar? Seria de muita utilidade para mim…