修改
似乎无法使rendered
与update
属性一起正常工作。这是我的代码
<ui:define name="left">
<h:form>
<p:commandLink value="Hey"
actionListener="#{bean.setRenderComment}"
update="comment"/>
</h:form>
</ui:define>
<ui:define name="right">
<h:panelGroup id="comment" rendered="#{bean.renderComment}">
hello
</h:panelGroup>
</ui:define>
renderComment
是bean
内的布尔属性。 setRenderComment
基本上切换renderComment
这样的状态
this.renderComment = !this.renderComment;
是的,每次点击链接Hey
时,我都需要刷新以启用或关闭hello
。我该如何修复它,以便我不需要刷新
答案 0 :(得分:13)
我没有在我的项目中使用Primefaces而是使用Richfaces。所以我并不知道Primefaces如何完成刷新过程。但是,我有一个可以轻松测试的想法。
您的问题可能是由于在HTML页面上找不到要重新呈现的组件(即更新)。如果您的rendered
属性等于false
,那么带有<SPAN>
ID的comment
不会集成在生成的HTML页面中。因此,当在客户端收到Ajax请求时,Ajax引擎无法刷新此<SPAN>
,因为找不到它。
所以你可以做的就是始终呈现你的panelGroup
并将你的rendered
属性移动到包含 Hello 消息的嵌套<h:outputText>
。
以下是我的建议:
<h:panelGroup id="comment">
<h:outputText value="Hello" rendered="#{bean.renderComment}"/>
</h:panelGroup>
这样,在Ajax调用之后,panelGroup将始终刷新,并且它将包含 Hello 消息,关于bean的renderComment
属性的值。 / p>
答案 1 :(得分:1)
由于ID为comment
的组件不是表单(UINamingContainer
组件)子组件之一,因此您需要在ID前加:
以指示JSF扫描“上层”。
这应该做:
<p:commandLink value="Hey"
actionListener="#{bean.setRenderComment}"
update=":comment" />