7

JSFで簡単な例を作成しています。小さなログイン アプリケーションです。私の問題は、私のページにエラーメッセージが重複していることです:

私の画面

私のページには 2 つh:messageのタグ (ユーザー名とパスワード用) と 1 つのタグh:messages(グローバル メッセージ用) があります。

<h:form id="loginForm">

   <h:panelGrid columns="3">

       <h:outputText value="Username" />
       <h:inputText id="username" value="#{loginBean.username}" 
                  required="true" requiredMessage="Please enter your username" />
       <h:message for="username" errorClass="errorMessage" /> <!-- Message for username -->

       <h:outputText value="Password" />
       <h:inputSecret id="password" value="#{loginBean.password}" 
                  required="true" requiredMessage="Please enter your password" />
       <h:message for="password" errorClass="errorMessage" /> <!-- Message for password -->


       <h:commandButton value="Login" action="#{loginBean.login}" />

   </h:panelGrid>

   <h:messages styleClass="errorMessage" /> <!-- Global messages -->


</h:form>

login()バッキング Bean のアクション メソッド:

public String login() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    if ("admin".equals(username) && "pass".equals(password)) {
        return "success";
    } else {
        facesContext.addMessage("loginForm", new FacesMessage("Username or password is incorrect"));
        return null;
    }
}

グローバルメッセージのボタンの下ではなく、これらのフィールドの横にのみ空のユーザー名またはパスワードに関するメッセージを表示したい. また、パスワードまたはユーザー名が正しくない場合、アクション メソッドからエラー メッセージをグローバル メッセージに出力したいと考えています。どうすればこれを解決できますか?

私は属性を使用しようとしましたglobalOnly:

<h:messages styleClass="errorMessage" globalOnly="true" /> <!-- Global messages -->

この場合、グローバルメッセージがまったく表示されないため、私の問題は完全には解決されません。

前もって感謝します!

4

1 に答える 1

18

globalOnlyバッキング Bean にメッセージを正しく追加すると、スイッチが機能するはずです。client-id は次の場所にある必要がありnullますFacesContext.addMessage(...):

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(message));
于 2012-06-14T09:11:29.750 に答える