5

以前の質問では、 ログインフォームから検証メッセージを表示するという問題がありました。この問題は解決されましたが、今回は。を使用してカスタムメッセージを表示できません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 (a )の場合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")); 
    } 
}

このコードは、検証が成功してログインが失敗した場合、「無効な資格情報」メッセージを表示するはずですが、表示されません。さらに、私のWebページの本文のどこかに、次の行も追加しました。

<p:messages autoUpdate="true" />

でも私のメッセージはそこにも表示されません。

Javadocによると

clientIdがnullの場合、このFacesMessageは特定のコンポーネントインスタンスに関連付けられていないと見なされます

しかし、これが何を意味するのか理解できません。

4

2 に答える 2

5

<p:messages autoUpdate="true" />あなたの内部またはあなたのcommandButtonformによって更新されているラッパーの内部に配置するか、またはの代わりに配置しますupdateloginDlgButtonnullcontext.addMessage(...

于 2012-05-01T13:04:09.070 に答える
3

コードにap:messagesタグが表示されません。これは、p:messageタグと同じではありません。p:messageは別のコンポーネントに添付され、検証の一部として表示されます。p:messages(またはp:growl)コンポーネントは、Beanで更新するものです。次のようなメッセージまたは唸り声コンポーネントを追加してみてください。

<h:form id="loginForm">
<p:growl id="messageGrowl" showDetail="true" sticky="false" />
<h:panelGrid columns="3" cellpadding="5">
于 2012-05-01T12:48:49.187 に答える