Growl Primefaces

Java

03/08/2015

Olá a todos.
Estou criando uma tela de login e estou com dificuldade de informar a mensagem de erro caso o usuário esteja incorreto. Na senha consigo normalmente.
Com o método abaixo retorno a tela que quero caso o usuário e senha estejam corretos. Caso contrário deveria-se retornar para a mesma tela de login e informar uma mensagem de erro.
Quando o usuário coloca a senha incorreta a mensagem aparece, mas quando ele informa o usuário incorreto a mensagem não é exibida.
Alguém já poderia me ajudar.
Abaixo coloquei o xhtml.

public String returnLogin(){
        
        EntityManager manager = getManager();
        Query q = manager.createQuery("select u from User u where u.login = :login");
        q.setParameter("login", getUser().getLogin());
        User user2 = (User) q.getSingleResult();
        boolean logged = false;
        if(user2.getLogin().equals(getUser().getLogin())){
            if(user2.getPassword().equals(getUser().getPassword()))
                logged = true;
        }
        else{
            logged = false;
        }
        
        if(logged == true)
            return "/form-principal.xhtml";
        else{
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Erro", "Login Inválido"));
            return "/login.xhtml";
        }   
          
    }


<h:form>
            <p:growl id="growl" showDetail="true" sticky="true" />  
            <p:panel id="panel-login" header="Login" style="margin-bottom: 10px">
                <h:panelGrid columns="2" cellpadding="5">
                    <h:outputLabel for="user" value="User"/>
                    <p:inputText id="user" required="true" value="#{loginMB.user.login}"/>
                    <h:outputLabel for="password" value="Password"/>
                    <p:password id="password" required="true" value="#{loginMB.user.password}"/>
                    <p:commandButton value="Enter" update="panel-login, growl" action="#{loginMB.returnLogin}"/>                    
                </h:panelGrid>
            </p:panel>
        </h:form>
Paulo Henrique

Paulo Henrique

Curtidas 0

Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

03/08/2015

O problema provavelmente não está no componente "growl" mas sim na sua lógica. Faça uma melhora do seu código:


public String returnLogin(){
         
        EntityManager manager = getManager();
        Query q = manager.createQuery("select u from User u where u.login = :login");
        q.setParameter("login", getUser().getLogin());
        User user2 = (User) q.getSingleResult();
        boolean logged = false;
        if(user2.getLogin().equals(getUser().getLogin()) &&  user2.getPassword().equals(getUser().getPassword())){
                logged = true;
  }
         
        if(logged == true)
            return "/form-principal.xhtml";
        else{
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Erro", "Login Inválido"));
            return "/login.xhtml";
        }   
           
    }


Depois dessa melhoria, tira o "return /login.xhml" apenas para certificar-se que a mensagem está sendo mostrada corretamente.
GOSTEI 0
Paulo Henrique

Paulo Henrique

03/08/2015

Olá Ronaldo.
Obrigado pela ajuda mas ainda continua apenas mostrando a mensagem quando informo a senha errada. Quando o usuário está incorreto não acontece nada.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

03/08/2015

Mude para o código abaixo e veja se a mensagem aparece no CONSOLE quando você informa o usuário errado

public String returnLogin(){
          
        EntityManager manager = getManager();
        Query q = manager.createQuery("select u from User u where u.login = :login");
        q.setParameter("login", getUser().getLogin());
        User user2 = (User) q.getSingleResult();
        boolean logged = false;
        if(user2.getLogin().equals(getUser().getLogin()) &&  user2.getPassword().equals(getUser().getPassword())){
                logged = true;
  }
 
             System.out.println("logged = "+logged);

        if(logged == true)
            return "/form-principal.xhtml";
        else{
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Erro", "Login Inválido"));
            return "/login.xhtml";
        }   
            
    }
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

03/08/2015

Mude para o código abaixo e veja se a mensagem aparece no CONSOLE quando você informa o usuário errado

public String returnLogin(){
          
        EntityManager manager = getManager();
        Query q = manager.createQuery("select u from User u where u.login = :login");
        q.setParameter("login", getUser().getLogin());
        User user2 = (User) q.getSingleResult();
        boolean logged = false;
        if(user2.getLogin().equals(getUser().getLogin()) &&  user2.getPassword().equals(getUser().getPassword())){
                logged = true;
  }
 
             System.out.println("logged = "+logged);

        if(logged == true)
            return "/form-principal.xhtml";
        else{
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Erro", "Login Inválido"));
            return "/login.xhtml";
        }   
            
    }
GOSTEI 0
POSTAR