这是我的布局
<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
周围放置一个表单,那么它就可以了。那是为什么?
答案 0 :(得分:59)
update
属性应指向HTML DOM树中的现有客户端ID。但是,由于该元素在HTML DOM树中不可用,因为它不是由服务器端呈现的,所以JS / ajax在HTML DOM树中找不到任何要更新的内容。
实际上,您应该将它包装在HTML DOM树中始终可用的另一个元素中,以便Ajax可以找到它,然后在update
中使用其客户端ID。在您的情况下,您可以使用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>