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 boolean, она не переключает отображение текста Personal Feed. Теперь, если вместо этого поставить форму h:outputText и Update form, тогда она будет работать. Почему это?

Ответ 1

Атрибут update должен указывать на существующий идентификатор клиента в дереве HTML DOM. Однако, поскольку элемент не доступен в дереве HTML DOM, поскольку он не отображается на стороне сервера, JS/ajax не может найти ничего в дереве HTML DOM для обновления.

Фактически, вы должны перенести его в другой элемент, который всегда доступен в дереве HTML DOM, чтобы Ajax мог его найти, а затем использовать его идентификатор клиента в update. В вашем случае вы можете использовать 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>