JSF + PrimeFaces:`update`属性不更新组件

时间:2011-01-01 04:45:11

标签: jsf jsf-2 primefaces

这是我的布局

<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:outputTextupdate form周围放置一个表单,那么它就可以了。那是为什么?

1 个答案:

答案 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>