web-dev-qa-db-ja.com

JSF + PrimeFaces: `update`属性はコンポーネントを更新しません

これが私のレイアウトです

<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の周りにフォームを配置し、代わりにupdateformに配置すると、動作します。何故ですか?

24
Thang Pham

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>
60
BalusC