1
I have a very simple system of Registration and Login, I made a validation in both fields.
I want to adapt this validation to something more specific like:
- Login does not exist
- Password invalidates
Currently my validation has a single return: "Invalid login or password"
Loginmanagedbean:
package br.com.arena.controller;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import br.com.arena.dao.PessoaDAO;
import br.com.arena.model.Pessoa;
@ManagedBean(name = "LoginMB")
@ViewScoped
public class LoginManagedBean {
    private PessoaDAO pessoaDAO = new PessoaDAO();
    private Pessoa pessoa = new Pessoa();
    public String envia() {
        pessoa = pessoaDAO.getPessoa(pessoa.getNomeUsuario(), pessoa.getSenhaUsuario());
          if (pessoa == null) {
              pessoa = new Pessoa();
                FacesContext.getCurrentInstance().addMessage(
                           null,
                           new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login ou senha invalidos",
                                       "Erro no Login!"));
                return null;
          } else {
                return "/main";
          }
    }
    public PessoaDAO getPessoaDAO() {
        return pessoaDAO;
    }
    public void setPessoaDAO(PessoaDAO pessoaDAO) {
        this.pessoaDAO = pessoaDAO;
    }
    public Pessoa getPessoa() {
        return pessoa;
    }
    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }
}
Personal:
package br.com.arena.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import br.com.arena.model.Pessoa;
import br.com.arena.util.JPAUtil;
public class PessoaDAO {
    private EntityManager em;
    public PessoaDAO() {
        setEm(JPAUtil.getEntityManager());
    }
    public void cadastrar(Pessoa pessoa){
        getEm().getTransaction().begin();
        getEm().persist(pessoa);
        getEm().getTransaction().commit();
    }
    public void atualizar(Pessoa pessoa){
        getEm().getTransaction().begin();
        getEm().merge(pessoa);
        getEm().getTransaction().commit();
    }
    public List<Pessoa> listaTodasPessoas(){
        Query q = em.createQuery("select p from Pessoa p");     
        List<Pessoa> pessoas = q.getResultList();
        return pessoas;
    }
    public Pessoa getPessoa(String nomeUsuario, String senhaUsuario) {
        try {
            Pessoa pessoa = (Pessoa) em
                         .createQuery(
                                     "SELECT u from Pessoa u where u.nomeUsuario = :name and u.senhaUsuario = :senha")
                         .setParameter("name", nomeUsuario)
                         .setParameter("senha", senhaUsuario).getSingleResult();
              return pessoa;
        } catch (NoResultException e) {
              return null;
        }
  }
    public void removerPessoa(Pessoa pessoa){
        getEm().getTransaction().begin();
        getEm().find(Pessoa.class, pessoa.getId());
        getEm().remove(pessoa);
        getEm().getTransaction().commit();  
    }
    public EntityManager getEm() {
        return em;
    }
    public void setEm(EntityManager em) {
        this.em = em;
    }
}
Login.xhtml:
<!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:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>Arena</title>
</h:head>
<h:body>
    <h1>Login</h1>
     <h:form>
              <p:messages id="messages" />
              <p:panelGrid columns="2">
                    <p:outputLabel for="nomeUsuario" value="Nome Usuário:" />
                    <p:inputText id="nomeUsuario" value="#{LoginMB.pessoa.nomeUsuario}" />
                    <p:outputLabel for="senha" value="Senha:" />
                    <p:password id="senha" value="#{LoginMB.pessoa.senhaUsuario}" />
                    <p:commandButton value="Enviar" icon="ui-icon-star" action="#{LoginMB.envia}" ajax="false">
                    </p:commandButton>
              </p:panelGrid>
        </h:form>
</h:body>
</html>