Fazendo Login e consultado a partir do login

5 respostas
Luciano_Khrisley

Fala pessoal, blz?
Minha dúvida parece ser bem simples, pelo menos quando estou desenvolvendo desktop é.
Vamos lá. preciso fazer um consulta a partir do login, meu login esta certinho e direciono para a página que quero de forma correta.
Porém preciso a partir desse login direcionar uma consulta. O Sistema será usado para consulta de notas de aluno. Quando o aluno fizer o login abre uma tela com suas notas, simples não. hehehehehe não estou conseguindo. vamos lá.
segue o 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:f="http://java.sun.com/jsf/core"  
      xmlns:h="http://java.sun.com/jsf/html"  
      xmlns:ui="http://java.sun.com/jsf/facelets">  
            
    <h:body>  
        <ui:composition template="/_template.xhtml">  
              
            <ui:define name="corpo">  
                  
              <div id="blocoConteudo">  
                <div class="container">   
                    <h2>Login no Sistema</h2>  
                    <h:form id="formLogin">  
                        <h:panelGrid columns="2" styleClass="Campos">   
                            <h:outputLabel value = "Login: " for = "login"/>  
                            <h:inputText id = "login" value ="#{alunoBean.aluno.login}"/>  
       
                            <h:outputLabel value = "Senha: " for = "senha"/>  
                            <h:inputSecret id = "senha" value ="#{alunoBean.aluno.senha}"/>  
              
                            <f:ajax render = ":formLogin" execute = "@form">  
                                <h:commandButton value="Efetuar Login" action ="#{alunoBean.efetuaLogin}"/>  
                            </f:ajax>  
                        </h:panelGrid>     
                    </h:form>  
                </div>  
            </div>  
                  
            </ui:define>  
              
        </ui:composition>          
    </h:body>  
</html>

blz… até aí maravilha…

sigo o login pelo meu ManagedBean que esta uma maravilha também fazendo seu serviço direitinho.

view plaincopy to clipboardprint?
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/  
package br.com.admescolarweb.mb;  
  
import br.com.admescolarweb.dao.AlunoDAO;  
import br.com.admescolarweb.dao.DAO;  
import br.com.admescolarweb.modelo.Atafaluno;  
import java.util.List;  
import javax.faces.bean.ManagedBean;  
import javax.faces.bean.SessionScoped;  
  
/** 
* 
* @author Luciano 
*/  
  
@SessionScoped  
@ManagedBean  
  
public class AlunoBean {  
      
    private Atafaluno aluno = new Atafaluno();  
    private List<Atafaluno> alunos;  
  
    public Atafaluno getAluno() {  
        return aluno;  
    }  
  
    public void setAluno(Atafaluno aluno) {  
        this.aluno = aluno;  
    }  
  
    public List<Atafaluno> getAlunos() {  
        if (alunos == null){  
            alunos = new DAO<Atafaluno>(Atafaluno.class).listaTodos();  
        }  
        return alunos;  
    }  
  
    public void setAlunos(List<Atafaluno> alunos) {  
        this.alunos = alunos;  
    }  
      
    public Atafaluno busca(Long id){  
        DAO<Atafaluno> dao = new DAO<Atafaluno>(Atafaluno.class);  
        return dao.buscaPorId(id);  
    }  
      
    public String efetuaLogin(){  
        AlunoDAO dao = new AlunoDAO();  
        boolean loginValido = dao.existe(this.aluno);  
        if (loginValido){  
            return "rel_Aluno?faces-redirect=true";  
        } else {  
            return "login";  
        }  
    }  
                  
}

ok, tudo certo. O metodo efetuaLogin esta ok, vou mostrar meu AlunoDAO.

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/  
package br.com.admescolarweb.dao;  
  
import br.com.admescolarweb.modelo.Atafaluno;  
import javax.persistence.EntityManager;  
import javax.persistence.Query;  
  
/** 
* 
* @author Luciano 
*/  
public class AlunoDAO {  
      
    public boolean existe(Atafaluno aluno){  
        EntityManager em = new JPAUtil().getEntityManager();  
        em.getTransaction().begin();  
          
        Query query = em.createQuery("from Atafaluno a where a.login = :pLogin and a.senha = :pSenha");  
        query.setParameter("pLogin", aluno.getLogin());  
        query.setParameter("pSenha", aluno.getSenha());  
          
        boolean encontrado = !query.getResultList().isEmpty();  
          
        em.getTransaction().commit();  
        em.close();  
        return encontrado;  
          
    }  
      
}

o login foi feito e redirecionado para o XHTML - rel_Aluno

<?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:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
          
    <h:body>
        <ui:composition template="/_template.xhtml">
            
            <ui:define name="corpo">
                
              <div id="blocoConteudo">
                <div class="container"> 
                    <div id = "usuarioLogado">
                        Olá: -  <h:outputText value = "#{alunoBean.aluno.login}"/>                        
                     </div>
                    <h2>Dados do Aluno</h2>
                    <h:form>
                        <h:dataTable value="#{alunoBean.alunos}" var="a" styleClass="dados" rowClasses="impar,par">
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value="Nome: "/>
                                </f:facet>
                                #{a.nome}
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value="Disciplina: "/>
                                </f:facet>
                                #{a.d1}
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value="1º Bimestre: "/>
                                </f:facet>
                                #{a.n1b1}
                            </h:column>
                        </h:dataTable>
                    </h:form>
                </div>
            </div>
                
            </ui:define>
            
        </ui:composition>        
    </h:body>
</html>

OK, até o nome do usuário aparece como logado… Olá: - <h:outputText value = “#{loginBean.aluno.login}”/>

mas dessa forma <h:dataTable value="#{alunoBean.alunos}" var=“a” styleClass=“dados” rowClasses=“impar,par”>

estou preenchendo a tabela com uma lista de alunos e funcionou, porem preciso preencher com um aluno único.

retornado a partir do login.

para informação: o login e senha são campos da mesma tabela que possuem as informações dos alunos, o banco possui uma única tabela.

espero ter conseguido passar minha dificuldade, no aguardo…

grande abraço a todos

5 Respostas

alves.Felipe

assim como vc criou o método getAlunos(), vc pode criar um método getNotasAluno e chamar a consulta de notas por aluno
e no xhtml fica a mesma coisa, só alterando para o método novo e adequando os campos da tabela

era isso que precisava??

Batney

Luciano faça isto no seu DAO e chame ele no efetuaLogin();

public Atafaluno buscaAluno(Long id){
	
		aluno = em.find(Atafaluno.class, id);
		
		return aluno;
	}
Luciano_Khrisley

Batney e Felipe, desculpe a demora na resposta, mas é que estive fora por uns dias…
mas vamos lá, melhorou alguma coisa mas ainda não consegui obter o resultado.
Creio que vc´s tenham entendido o propósito.
Vou explicar a melhora que obtive.
Seguinte: eu faço o login abro o xhtml onde irei exibir as notas respectivas ao aluno logado, mas não consigo de forma alguma retornar as notas desse aluno diretamente. Só consigo fazendo assim. Preencho uma SelectOneMenu, através de um metodo lista com todos os alunos, quando o aluno é escolhido na listagem, seto seu ID, chamo o MenagedBean que faz a buca pelo ID, e que preenche uma nova lista somente do Aluno setado, blz! Preencho a dataTable com essa lista é esta supimpa.
Amigos, parece que estou fazendo o mais difícil e não consigo fazer o simples. A idéia é logar com um aluno e automaticamente buscar a notas desse aluno. Me Ajudem por favor. Vou Colocar aqui tudo novamente em sequência.
grande abraço

<?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:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
          
    <h:body>
        <ui:composition template="/_template.xhtml">
            
            <ui:define name="corpo">
                
              <div id="blocoConteudo">
                <div class="container"> 
                    <h2>Login no Sistema</h2>
                    <h:form id="formLogin">
                        <h:panelGrid columns="2" styleClass="Campos"> 
                                                        
                            <h:outputLabel value = "Login: " for = "login"/>
                            <h:inputText id = "login" value ="#{loginBean.aluno.login}"/>
     
                            <h:outputLabel value = "Senha: " for = "senha"/>
                            <h:inputSecret id = "senha" value ="#{loginBean.aluno.senha}"/>
            
                            <f:ajax render = ":formLogin" execute = "@form">
                                <h:commandButton value="Efetuar Login" action ="#{loginBean.efetuaLogin}"/>
                            </f:ajax>
                        </h:panelGrid>   
                    </h:form>
                </div>
            </div>
                
            </ui:define>
            
        </ui:composition>        
    </h:body>
</html>

então tela de Login, funcionando blz… passando aqui direto para o Bean loginBean método efetuaLogin

public String efetuaLogin(){
        
        AlunoDAO dao = new AlunoDAO();
        
        boolean loginValido = dao.existe(this.aluno);
        if (loginValido){
            return "rel_AlunoCerto?faces-redirect=true";
        } else {
            return "login";
        }
    }

o método Existe do AlunoDAO, vou colocar o AlunoDAO todo aqui, pois fiz vários testes e não consegui.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.admescolarweb.dao;

import br.com.admescolarweb.modelo.Atafaluno;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author Luciano
 */
public class AlunoDAO {
    
    
    Atafaluno aluno = new Atafaluno();
    
    public boolean existe(Atafaluno aluno){
        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();
        
        Query query = em.createQuery("select a from Atafaluno a where a.login = :pLogin and a.senha = :pSenha");
        query.setParameter("pLogin", aluno.getLogin());
        query.setParameter("pSenha", aluno.getSenha());
        
        boolean encontrado = !query.getResultList().isEmpty();
        
        em.getTransaction().commit();
        em.close();
        return encontrado;
        
    }
    
    public List<Atafaluno> listaAlunosOrdemAlfabetica(){
                        
        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();
        
        String jpql = "select a from Atafaluno a order by a.nome";
        Query query = em.createQuery(jpql);
        
        em.getTransaction().commit();
        em.close();
        
        return query.getResultList();
 
    }
    
    public Atafaluno buscaAluno(){
        
        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();
        
        aluno = em.find(Atafaluno.class, aluno.getId());  
        em.getTransaction().commit();
        em.close();
        
        return aluno;
    
    }         
}

depois de logado certinho, vou para o XHTML que se segue…

<h:form>
                        <fieldset>
                            <h:panelGrid>
                                <h2>Aluno:</h2>
                                    <h:selectOneMenu value="#{alunoBean.idAluno}">
                                        <f:selectItems value="#{alunoBean.alunos}" var="al" itemValue="#{al.id}" itemLabel="#{al.nome}"/>
                                    </h:selectOneMenu>
                                    <h:commandButton value="Escolher aluno:" action="#{alunoBean.retornaAluno}"/>
                                </h:panelGrid>
                        </fieldset>
                    </h:form>
                    <h2>Acompanhamento</h2>
                    <h:form>
                        <h3>Dados da escola</h3>
                        <h:dataTable value="#{alunoBean.notaAluno}" var="e" styleClass="dados" rowClasses="impar,par">
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value=""/>
                                </f:facet>
                                <h4>NOME: #{e.nomeent}</h4><br/>
                                <h4>ENDEREÇO: #{e.enderecoent} - NÚMERO #{e.numeroent}, CIDADE - #{e.cidadeent}-#{e.estadoent}</h4>
                            </h:column>
                        </h:dataTable>
                        <h3>Dados do aluno</h3>
                        <h:dataTable value="#{alunoBean.notaAluno}" var="n" styleClass="dados" rowClasses="impar,par">
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value="Nome: "/>
                                </f:facet>
                                #{n.nome}
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value="Classe: "/>
                                </f:facet>
                                #{n.classe}
                            </h:column>

segue só uma para aqui, e por fim o bean do Aluno.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.admescolarweb.mb;

import br.com.admescolarweb.dao.AlunoDAO;
import br.com.admescolarweb.dao.DAO;
import br.com.admescolarweb.dao.JPAUtil;
import br.com.admescolarweb.modelo.Atafaluno;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.Query;


/**
 *
 * @author Luciano
 */

@SessionScoped
@ManagedBean

public class AlunoBean {
    
    private Long idAluno;
    private List<Atafaluno> alunos;
    private Atafaluno notaAluno = new Atafaluno();
        
    public Long getIdAluno() {
        return idAluno;
    }

    public void setIdAluno(Long idAluno) {
        this.idAluno = idAluno;
    }

    public List<Atafaluno> getAlunos(){
        AlunoDAO dao = new AlunoDAO();
        if (alunos == null ){
            alunos = dao.listaAlunosOrdemAlfabetica();
        }
        return alunos;
    }
    
    public Atafaluno getNotaAluno(){
        return notaAluno;
    }
    
    public void retornaAluno(){
        DAO<Atafaluno> dao = new DAO<Atafaluno>(Atafaluno.class);
        Atafaluno alunoRetornadoComNota = dao.buscaPorId(idAluno);
        notaAluno = alunoRetornadoComNota;
    }
    
    public void retornandoAluno(){
        AlunoDAO dao = new AlunoDAO();
        Atafaluno alunoRetornadoComNota = dao.buscaAluno();
        notaAluno = alunoRetornadoComNota;
    }
        
}

o método q estou usando do Bean é o RetornaAluno.

fico no aguardo… grande abraço

Adriano_Almeida

Oi Luciano,

pelo que entendi, o filtro você está fazendo corretamente, porém, como você quer usar esse cara em um datatable, o seu getNotaAluno no Managed Bean deveria devolver alguma coisa que o h:dataTable possa iterar, tipo um List.

Você ali tem um objeto só, então, se for o caso você poderia utilizá-lo sem um datatable, apenas mostrando suas informações diretamente. Se o cara tiver várias notas, aí você devolveria as várias notas.

[]'s

Luciano_Khrisley

fala pessoal, consegui resolver…
foi um vacilo muito grande, meu método getNotaAluno precisava ficar dentro do loginBean e eu estava colocando dentro do alunoBean, então não conseguia pegar os valores de login e senha para retornar os registros. Foi só isso, fazer o get dentro do loginBean e pronto… Resolveu!!!

Muito obrigado pela ajuda de todos

abração

Criado 12 de julho de 2011
Ultima resposta 20 de jul. de 2011
Respostas 5
Participantes 4