2014-09-26 2 views
0

Я хочу показать сообщение об ошибке PrimeFaces, если сбой входа. Это то, что я до сих пор:Показать сообщение об ошибке PrimeFaces при ошибке входа в систему

Модель:

public String login() { 
    Query query = em.createNamedQuery("SelectUserByLogin"); 
    query.setParameter("alias", alias); 
    query.setParameter("password", password); 

    // TODO: type safety 
    List<User> result = query.getResultList(); 

    if (result.size() == 1) { 
     userLoggedIn = result.get(0); 
     return "home?faces-redirect=true"; 
    } else { 
     return null; 
    } 
} 

Вид:.

 <h:panelGrid> 
      <h:outputLabel value="#{msg.alias}" for="alias" /> 
      <p:inputText id="alias" required="true" 
       value="#{mbUserHandler.alias}" /> 
      <h:outputLabel value="#{msg.password}" for="password" /> 
      <p:password id="password" required="true" 
       value="#{mbUserHandler.password}" /> 
      <h:panelGroup /> 
      <p:commandButton action="#{mbUserHandler.login()}" 
       value="#{msg.login}" /> 
     </h:panelGrid> 

Логин() возвращает нулевое значение, если пользователь не найден и не может быть зарегистрирован в так это означает, что в представлении ничего не происходит. В этом случае я хотел бы показать сообщение об ошибке PrimeFaces.

Как я могу это сделать?

+0

Пожалуйста, http://www.primefaces.org/showcase/ui/message/messages.xhtml – maress

ответ

0

Отсюда: http://www.primefaces.org/showcase/ui/message/messages.xhtml

public String login() { 
    Query query = em.createNamedQuery("SelectUserByLogin"); 
    query.setParameter("alias", alias); 
    query.setParameter("password", password); 

    // TODO: type safety 
    List<User> result = query.getResultList(); 

    if (result.size() == 1) { 
     userLoggedIn = result.get(0); 
     return "home?faces-redirect=true"; 
    } else { 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error logging in", "Error logging in")); 
     return null; 
    } 
} 



     <h:panelGrid> 
      <p:messages showDetail="true"/> 
      <h:outputLabel value="#{msg.alias}" for="alias" /> 
      <p:inputText id="alias" required="true" 
       value="#{mbUserHandler.alias}" /> 
      <h:outputLabel value="#{msg.password}" for="password" /> 
      <p:password id="password" required="true" 
       value="#{mbUserHandler.password}" /> 
      <h:panelGroup /> 
      <p:commandButton action="#{mbUserHandler.login()}" 
       value="#{msg.login}" /> 
     </h:panelGrid> 
0

Добавить ящик сообщений где-то на странице, где вы хотите, чтобы вам сообщение. Для примера (. Autoupdate делает обновиться на AJAX запросов, которые не обновляют страницу Это важно, потому что primefaces стандартное поведение является использование Ajax для CommandButton-Actions):

<p:messages autoUpdate="true" id="messagebox" /> 

Вы можете добавлять сообщения в эту MessageBox из вашей фасоли:

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "My Message", null); 
0

...

<p:growl id="growl" showDetail="true" /> 
<p:commandButton action="#{mbUserHandler.login()}" 
      value="#{msg.login}" update="growl" /> 

...

else { 
    return FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Second Message", "Additional Message Detail")); 
} 
} 

Я думаю, вы должны проверить страницу http://www.primefaces.org/showcase/.

Смежные вопросы