To com um problema um tanto quanto estranho… estou fazendo uma validação de uma entidade Funcionario… Faço uma consulta com Hibernate pra saber se o funcionário existe no banco… se Sim… ele navega pra próxima página…
Esse ManagedBean Funcionario, eu adicionei com escopo de sessão…
<managed-bean>
<managed-bean-name>func</managed-bean-name>
<managed-bean-class>MngBeans.Funcionario</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Pelo que sei, essa instancia vai ficar disponível para mim durante a sessão do usuário…
Criei um form de login… Onde são necessários RG, Data de Nascimento e Código da Empresa (Sem senha…)…
Esse é meu ManagedBean que valida o usuário:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package MngBeans;
import DAOs.FuncionarioDAO;
import javax.faces.context.FacesContext;
import org.hibernate.Session;
/**
*
* @author Vinicius
*/
public class LoginBean {
/** Creates a new instance of LoginBean */
public LoginBean() {
}
public String logar(){
try{
Session session = Util.HibernateUtil.getSessionFactory().openSession();
FuncionarioDAO acessoDAO = new FuncionarioDAO(session);
FacesContext fc = FacesContext.getCurrentInstance();
Funcionario func = (Funcionario) fc.getApplication().getVariableResolver().resolveVariable(fc, "func");
FuncionarioPK func_pk = (FuncionarioPK) fc.getApplication().getVariableResolver().resolveVariable(fc, "funcpk");
Empresa empresa = (Empresa) fc.getApplication().getVariableResolver().resolveVariable(fc, "empresa");
func_pk.setEmpresaId(empresa.getId());
func.setFuncionarioPK(func_pk);
return acessoDAO.verificaAutenticacao(func);
}catch(Exception e){
return "Erro no VariableResolver." + e.getMessage();
}
}
}
Dai que vem o seguinte… No DAO eu faço a seguinte validação:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package DAOs;
import MngBeans.Funcionario;
import MngBeans.FuncionarioPK;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.hibernate.Query;
import org.hibernate.Session;
/**
*
* @author Vinicius
*/
public class FuncionarioDAO {
private Session session;
public FuncionarioDAO(Session session) {
this.session = session;
}
@SuppressWarnings("unchecked")
public String verificaAutenticacao(Funcionario func) {
try{
Query query = session.createQuery("SELECT u FROM Funcionario u WHERE u.funcionarioPK.rg =:rg AND u.funcionarioPK.empresaId =:empresa AND u.dtNascimento =:birth");
query.setInteger("rg", func.getFuncionarioPK().getRg());
query.setInteger("empresa", func.getFuncionarioPK().getEmpresaId());
query.setDate("birth",func.getDtNascimento());
Funcionario fnc = (Funcionario) query.uniqueResult();
if (fnc == null) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Funcionário Desconhecido"));
return null;
} else if(fnc.getAtivo().getId() == 3) {
func = fnc;
return "usr_ok";
} else {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Funcionário desligado"));
return null;
}
}catch(Exception e){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Erro no DAO." + e.getMessage()));
return null;
}
}
}
Veja que eu passei como parametro o ManagedBean de Funcionário que está na sessão… Dai faço a consulta… se ela for ok… eu retorno usr_ok e navego para a página… Más tem um porém… o meu Funcionário que veio como parametro tem apenas alguns dados setados (somente os dados necessários para fazer login)… Depois que faço a consulta, o Hibernate me volta um funcionário com todos os dados preenchidos… (No meu código Funcionario fnc = (Funcionario) query.uniqueResult())… O que eu faço então é atribuir esse Funcionário ao meu managedBean que está na sessão:
else if(fnc.getAtivo().getId() == 3) {
func = fnc;
return "usr_ok";
}
Agora o mais estranho… Depois de navegar para a próxima página… se eu colocar isso:
<h:outputText value="#{func.dtNascimento}"/><br>
<h:outputText value="#{func.nome}"/><br>
Apenas a data de nascimento sai na tela… Será que esse lance de atribuir a entidade de retorno do Hibernate para O managedbean não funciona??? COmo eu faria? Estou fazendo certo?