こんにちは私は私のページのコンポーネントを条件付きでレンダリングするためにこのコードを持っています:
<h:commandButton action="#{Bean.method()}" value="Submit">
<f:ajax execute="something" render="one two" />
</h:commandButton>
<p><h:outputFormat rendered="#{Bean.answer=='one'}" id="one" value="#{messages.one}"/></p>
<p><h:outputFormat rendered="#{Bean.answer=='two'}" id="two" value="#{messages.two}"/></p>
答えを取得してコンポーネントをレンダリングしますが、ページに表示するには、ページを更新する必要があります。この問題を解決するにはどうすればよいですか?助言がありますか?
JSFコンポーネントのrendered
属性は、JSFが目的のHTMLを生成するかどうかを制御するサーバー側の設定です。
_<f:ajax>
_タグのrender
属性は、JavaScriptがHTMLDOMツリーからdocument.getElementById()
によって取得できるJSF生成HTML要素の(相対)クライアントIDを指している必要があります。 ajaxリクエストの完了時にその内容。
ただし、JSFによってレンダリングされないHTML要素のクライアントIDを指定しているため(rendered
がfalse
であるため)、JavaScriptはHTMLDOMツリーでそれを見つけることができません。
alwaysレンダリングされ、したがってalwaysであるコンテナコンポーネントでラップする必要があります。 -)HTMLDOMツリーで利用できます。
_<h:commandButton action="#{Bean.method()}" value="Submit">
<f:ajax execute="something" render="messages" />
</h:commandButton>
<p>
<h:panelGroup id="messages">
<h:outputFormat rendered="#{Bean.answer=='one'}" value="#{messages.one}"/>
<h:outputFormat rendered="#{Bean.answer=='two'}" value="#{messages.two}"/>
</h:panelGroup>
</p>
_
無関係具体的な問題に対して、設計ミスの可能性があります。代わりに、actionメソッドで目的のメッセージを使用して設定した_#{Bean.message}
_プロパティを作成しないのはなぜですか。そのため、次のものを使用できます。
_<h:commandButton action="#{Bean.method()}" value="Submit">
<f:ajax execute="something" render="message" />
</h:commandButton>
<p>
<h:outputFormat id="message" value="#{Bean.message}" />
</p>
_
それが質問の中心ではないことは知っていますが、過去に何度もこの問題を抱えていたので、困っている人を助けるためにここに投稿します。 PrimeFacesを使用する人のために、PrimeFaces Extensionには Switch というコンポーネントがあります。
値に応じて、異なる出力またはコンポーネントを表示する必要がある場合があります。通常、これは
ui:fragment
タグを使用して実現できます。pe:switch
utilタグを使用すると、ui:fragment
のようなさまざまなチェックを使用して、ui:fragment rendered="#{!empty someController.value}"
タグを宣言する必要がなくなります。