JSF + Primefaces:Ajax を使用した「レンダリング」コンポーネントの問題
-
04-10-2019 - |
質問
編集
得られないようです rendered
正しく動作するように update
属性。これが私のコードです
<ui:define name="left">
<h:form>
<p:commandLink value="Hey"
actionListener="#{bean.setRenderComment}"
update="comment"/>
</h:form>
</ui:define>
<ui:define name="right">
<h:panelGroup id="comment" rendered="#{bean.renderComment}">
hello
</h:panelGroup>
</ui:define>
renderComment
内部のブール属性です bean
. setRenderComment
基本的に状態を切り替えます renderComment
このような
this.renderComment = !this.renderComment;
そう、リンクをクリックするたびに Hey
, 、どちらかをレンダリングするには更新する必要があります hello
オンでもオフでも。更新する必要がないように修正するにはどうすればよいですか
解決
私はプロジェクトでPrimeFacesではなくRichFacesを使用しています。したがって、私はPrimeFacesによって更新プロセスがどのように行われるかについてはあまり気づいていません。ただし、簡単にテストできるアイデアがあります。
あなたの問題 五月 再レンダリングするコンポーネントが アップデート)HTMLページにはありません。もしあなたの rendered
属性は等しい false
, 、 そうして <SPAN>
と comment
IDはです いいえ 生成されたHTMLページに統合されています。したがって、Ajax要求がクライアント側で受信された場合、Ajaxエンジンはこれを更新できません <SPAN>
発見されていないので。
だからあなたができることは常にあなたをレンダリングすることです panelGroup
そしてあなたを動かします rendered
ネストされた属性 <h:outputText>
それにはが含まれています こんにちは メッセージ。
これが私が提案していることです:
<h:panelGroup id="comment">
<h:outputText value="Hello" rendered="#{bean.renderComment}"/>
</h:panelGroup>
このようにして、Ajaxの呼び出し後にパネルグループは常に更新され、 こんにちは メッセージの価値についてメッセージ renderComment
あなたの豆の属性。
他のヒント
ID を持つコンポーネントなので、 comment
フォームの 1 つではありません ( UINamingContainer
コンポーネント) の子には、ID の先頭に次の文字を付ける必要があります。 :
JSF に「上位レベル」からスキャンするように指示します。
これは次のことを行う必要があります:
<p:commandLink value="Hey"
actionListener="#{bean.setRenderComment}"
update=":comment" />