不显示JSF FacesContext#addMessage

时间:2012-05-01 10:40:17

标签: jsf primefaces

在我的previous question中,我遇到了从登录表单显示验证消息的问题。该问题现已解决,但这次我无法使用FacesContex#addMessage显示自定义消息。

使用JSF + PrimeFaces。

<p:dialog header="Login" widgetVar="loginDlg">
    <h:form id="loginForm">
        <h:panelGrid columns="3" cellpadding="5">
            <h:outputLabel for="username" value="Username:" />
            <p:inputText value="#{loginBean.username}" id="username" required="true" label="username" />
            <p:message for="username" />
            <h:outputLabel for="password" value="Password:" />
            <h:inputSecret value="#{loginBean.password}" id="password" required="true" label="password" />
            <p:message for="password" />
            <f:facet name="footer">
                <p:commandButton value="Login" id="loginDlgButton" update=":loginForm,:welcomeMsg" actionListener="#{loginBean.login}"
                                    oncomplete="handleLoginRequest(xhr, status, args)"/>
                <p:message for="loginDlgButton" />
            </f:facet>
        </h:panelGrid>
    </h:form>
</p:dialog>

LoginBean SessionScoped ManagedBean)中:

public void login() {
    FacesContext context = FacesContext.getCurrentInstance(); 
    RequestContext rContext = RequestContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 
    try { 
        request.login(this.username, this.password); 
        rContext.addCallbackParam("loggedIn", true);
    } catch (ServletException e) { 
        rContext.addCallbackParam("loggedIn", false);
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid credentials")); 
    } 
}

此代码在验证成功且登录失败时,应显示“Invalid credential”消息,但不显示。此外,在我的网页正文中,我还添加了这一行:

<p:messages autoUpdate="true" />

但我的信息即使在那里也没有显示。

Javadocs

  

如果clientId为null,则假定此FacesMessage不与任何特定组件实例关联

但我无法理解这意味着什么。

2 个答案:

答案 0 :(得分:4)

<p:messages autoUpdate="true" />放在form内或您的commandButton的update更新的某个包装内,或将loginDlgButton代替null放入{ {1}}

答案 1 :(得分:3)

我的代码中没有看到p:messages标记。它与p:message标记不同。 p:消息附加到另一个组件,并作为验证的一部分显示。 p:messages(或p:growl)组件是您在bean中更新的组件。尝试添加消息或咆哮组件,如下所示:

<h:form id="loginForm">
<p:growl id="messageGrowl" showDetail="true" sticky="false" />
<h:panelGrid columns="3" cellpadding="5">