これが私のレイアウトです
<div id="mainPanel">
<div id="padding">
<h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/>
</div>
<div id="right">
<h:form>
<p:commandButton value="Update" actionListener="#{bean.toggleComment}" update="text" />
</h:form>
</div>
</div>
Update
ブールのオンとオフを切り替えるリンクrenderComment
をクリックしても、テキストPersonal Feed
の表示は切り替わりません。 h:outputText
の周りにフォームを配置し、代わりにupdate
をform
に配置すると、動作します。何故ですか?
update
属性は、HTML DOMツリー内の既存のクライアントIDを指す必要があります。ただし、サーバー側でレンダリングされないため、HTML DOMツリーでは要素が使用できないため、JS/ajaxは更新するHTML DOMツリーで何も見つけることができません。
実際、Ajaxがそれを見つけてupdate
でそのクライアントIDを使用できるように、HTML DOMツリーで常に利用可能な別の要素でラップする必要があります。あなたの場合、これにpadding
を使用できます。
<div id="mainPanel">
<h:panelGroup id="padding" layout="block">
<h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/>
</h:panelGroup>
<div id="right">
<h:form>
<p:commandButton value="Update" actionListener="#{bean.toggleComment}" update=":padding" />
</h:form>
</div>
</div>