JSF + Primefaces:Ajax を使用した「レンダリング」コンポーネントの問題

StackOverflow https://stackoverflow.com/questions/3756256

  •  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" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top