4

编辑
似乎无法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里面是一个布尔属性beansetRenderComment基本上切换这样的renderComment状态

this.renderComment = !this.renderComment;

是的,每次我点击链接Hey时,我都需要刷新以hello打开或关闭渲染。我怎样才能修复它,这样我就不需要刷新

4

2 回答 2

13

我没有在我的项目中使用 Primefaces,而是 Richfaces。所以我不太清楚Primefaces是如何完成刷新过程的。但是,我有一个可以轻松测试的想法。

您的问题可能是由于在 HTML 页面上找不到要重新渲染的组件(即update )。如果您的rendered属性等于false,则<SPAN>with commentid集成到生成的 HTML 页面中。因此,当客户端收到 Ajax 请求时,Ajax 引擎无法刷新它<SPAN>,因为它没有找到。

因此,您可以做的是始终呈现您的属性panelGroup并将您的属性移动到包含Hello消息rendered的嵌套中。<h:outputText>

这是我的建议:

<h:panelGroup id="comment">
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/>
</h:panelGroup>

这样,在 Ajax 调用之后,panelGroup 将始终刷新,并且它是否包含Hello消息,取决于renderComment您的 bean 属性的值。

于 2010-09-21T08:40:55.217 回答
1

由于具有 ID 的组件comment不是表单的(UINamingContainer组件)子之一,因此您需要在 ID 前面加上前缀:以指示 JSF 从“上层”进行扫描。

这应该这样做:

<p:commandLink value="Hey"
    actionListener="#{bean.setRenderComment}"
    update=":comment" />
于 2010-09-20T23:50:01.707 回答