Galera então, antes de criticar os erros por favor leva em consideração por eu ser iniciante.
Vamos lá,
Eu tenho um formulário em xhtml onde o usuário informa o LOGIN é SENHA. No xhtml eu tento recuperar o login e senha é da certo :thumbup: , só que na minha classe modelo
eu tenho nome, endereço e mais dados. Então quando eu tento recuperar esses dados que não são passados na requisição eu não consigo . Como eu faço para recuperar esses dados?
[color=red]Meu DAO:[/color]
public class UsuarioDAO {
public boolean existe(PerfilUsuario perfilUsuario){
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
Query query = em.createQuery("from PerfilUsuario p where p.login=:pLogin and p.senha = :pSenha");
query.setParameter("pLogin", perfilUsuario.getLogin());
query.setParameter("pSenha", perfilUsuario.getSenha());
boolean encontrado = !query.getResultList().isEmpty();
em.getTransaction().commit();
em.close();
return encontrado;
}
}
[color=red]Meu BEAN:[/color]
public class LoginBean {
private PerfilUsuario perfilUsuario = new PerfilUsuario();
public String efetuaLogin() {
UsuarioDAO dao = new UsuarioDAO();
boolean loginValido = dao.existe(this.perfilUsuario);
if (loginValido) {
return "menu?faces-redirect=true";
} else {
this.perfilUsuario = new PerfilUsuario();
return "login?faces-redirect=true";
}
}
Jakefrog, pensei que havia entendido. Mais ficou um pouco dificil de visualizar como eu irei colocar o perfilUsuario dentro da sessão. O perfilUsuario ele
já não está na sessão quando anotamos a classe como @SessionScoped?
Pelo que eu entendi vc quer recuperar os outros dados do usuario.
Mas na sua classe DAO vc apenas confere se o usuário existe no banco de dados.
Retorne o usuário. tente algo do tipo
Query query = em.createQuery("from PerfilUsuario p where p.login=:pLogin and p.senha = :pSenha");
query.setParameter("pLogin", perfilUsuario.getLogin());
query.setParameter("pSenha", perfilUsuario.getSenha());
// boolean encontrado = !query.getResultList().isEmpty();
return query.getResultList();
em.getTransaction().commit();
em.close();
No seu bean vc coloca os dados que foram carregados para utilizar durante a aplicação.
public void carregaUsuario(){
UsuarioDAO dao = new UsuarioDAO();
PerfilUsuario usuario = dao.existe(this.perfilUsuario);
}
Pois bem , a gambirra sempre salva, as vezes, mas nesse caso eu acho que não.
Vou dar um exemplo aqui de como faço.
Minha classe dao, verifica se os dados passados estao no banco de dados e recupero o usuario nesse caso
public Aluno verificaAluno(Aluno aluno){
try {
javax.persistence.Query q = getEntityManager().createQuery("SELECT p FROM Aluno p WHERE p.email = :email AND p.senha = :password");
q.setParameter("email", aluno.getEmail());
q.setParameter("password", aluno.getSenha());
aluno = (Aluno) q.getSingleResult();
return aluno;
} catch (Exception e) {
return null;
}finally{
closeEntityMAnager();
}
}
Meu bean para armazenar os dados recuperados
@ManagedBean(name="alunoBean")
@SessionScoped
public class AlunoBean {
private Aluno aluno = new Aluno();
//METODOS GETTERS E SETTERS
// METODO PARA LOGIN DO ALUNO
public String login(){
AlunoDAO alunoDAO = new AlunoDAOImpl();
Aluno temp = alunoDAO.verificaAluno(getAluno()); // VERIFICO EXISTENCIA DO ALUNO
FacesContext facesContext = FacesContext.getCurrentInstance();
if(temp == null){
FacesMessage facesMessage = new FacesMessage("Erro nos dados fornecidos");
facesContext.addMessage("aviso", facesMessage);
return "fracassoLogin";
}else{
this.aluno = temp;
facesContext.addMessage("bem-vindo", new FacesMessage("Bem-vindo"));
facesContext.addMessage("bem-vindo", new FacesMessage(this.aluno.getNome().toUpperCase()));
return "welcomePage";
}
}
E uma entidade aluno a qual terá os dados do aluno
public class Aluno(){
private String nome;
private String password;
//getters e setters
ATEN, como agora eu consigo pegar o usuário, eu consigo limitar o template que aquele usuário vai poder visualizar?
Tipo, a minha aplicação eu uso facelets(não sei se é assim que se escreve) para fazer com que todas as paginas tenha o mesmo cabeçalho e rodapé.
Só que agora como eu estou capturando os dados do usuário logado e vamos supor que o meu usuário tenha um campo onde ‘1’ é para administrador e ‘2’ é para usuário comum. Sendo assim se o usuário logado for ‘1’ eu quero que mostre chame o template se o usuário for ‘2’ quero que chame o template2. É possivel fazer isso ?