登录时显示PrimeFaces错误消息失败

时间:2014-09-26 09:23:15

标签: java-ee 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>
如果找不到用户并且无法登录,则

login()返回null。这意味着视图中没有任何反应。在这种情况下,我想显示PrimeFaces错误消息。

我该怎么做?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

在页面上的某个位置添加消息框。 例如(Autoupdate使它在不更新页面的ajax请求上更新自己。这很重要,因为primefaces的标准行为是使用ajax来执行commandButton-Actions):

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

然后,您可以从bean中将消息添加到此消息框中:

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

答案 2 :(得分: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/页面。