6

JSF 2.1 +PrimeFaces3.3ページがあります。

<h:form id="particluar">
  <p:message id="msg" globalOnly="true" display="text"/>

  <h:panelGrid columns="2" id="test">
    <h:panelGrid id="panel2" columns="3">
      <p:inputText id="name1" value="Student.studentID" required="true"/>          
      <p:commandButton value="Check Name" actionListener="#{Student.abc}" process="name1" update="panel2" />
      <p:message id="msg1" for="name1" display="text"/>
    </h:panelGrid>

    <p:inputText id="name2" required="true"/>
    <p:message id="msg2" for="name2" display="text"/>

    <p:inputText id="name3" required="true"/>
    <p:message id="msg3" for="name3" display="text"/>

  </h:panelGrid>
  <p:commandButton value="submit" actionListener="#{Student.xyz}" update="particluar" />
</h:form>

名前が無効な場合、手動で顔メッセージを追加しようとしています:

public void xyz() {
  if (name1.equals("primefaces")) {
    FacesContext.getCurrentInstance().addMessage("msg1", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Name", "Invalid Name"));
  }
  if (name2.equals("primefaces")) {
    FacesContext.getCurrentInstance().addMessage("msg2", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Name", "Invalid Name"));
  }
  if (name3.equals("primefaces")) {
    FacesContext.getCurrentInstance().addMessage("msg3", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Name", "Invalid Name"));
  }
}

ただし、それらは表示されず、サーバーログは次の警告を出力し続けます。

未処理のFacesMessageがいくつかあります。これは、すべてのFacesMessageがレンダリングされる機会があったわけではないことを意味します。

ページに表示するにはどうすればよいですか?

また、2番目の質問ですが、3つの空の入力フィールドを含むフォームを送信すると、に<p:message>関連付けられたそれぞれに「必須の入力エラーメッセージ」が表示されます<p:inputText>。どうすればそれらを表示でき<p:message globalOnly="true">ますか?

4

1 に答える 1

12

ページに表示するにはどうすればよいですか?

有効なクライアントIDを指定する必要があります。クライアントIDはコンポーネントIDと同じではありません。クライアントIDは、JSFで生成されたHTML出力に表示されるものです。また、クライアントIDは、メッセージコンポーネントではなく、入力コンポーネントの1つである必要があります。

だから、与えられた

<h:form id="particular">
    <p:inputText id="name1" />
    <p:message id="msg1" for="name1" />
</h:form>

入力コンポーネントにはクライアントIDがありますparticular:name1(ブラウザーでページを右クリックし、[ソースの表示]を実行して自分で表示します)。したがって、メッセージは正確にこのクライアントIDに添付する必要があります。

context.addMessage("particular:name1", message);

また、2番目の質問ですが、3つの空の入力フィールドを含むフォームを送信すると、に<p:message>関連付けられたそれぞれに「必須の入力エラーメッセージ」が表示されます<p:inputText>。どうすればそれらを表示でき<p:message globalOnly="true">ますか?

はその<p:message>ための有効なコンポーネントではないため、を使用する必要があります<p:messages>

<p:messages id="msg" globalOnly="true" display="text"/>

このglobalOnly="true"属性は、nullクライアントIDを持つメッセージのみが表示されることを意味します。したがって、そのようなメッセージを正確に追加する必要があります。

context.addMessage(null, message);

参照:


具体的な問題とは関係なく、そこに追加しようとしている非グローバルメッセージ(「無効な名前」)は、実際には十分な価値のあるバリデーターによって実行される必要があります。具体的な例については、JSFで検証を実行する方法、JSFでカスタムバリデーターを作成する方法も参照してください。

于 2013-01-13T18:30:38.883 に答える