【问题标题】:JSF + Primefaces: Problem with "rendered" components with ajaxJSF + Primefaces:使用 ajax 的“渲染”组件的问题
【发布时间】:2011-04-14 22:48:33
【问题描述】:

编辑
似乎无法让 renderedupdate 属性一起正常工作。这是我的代码

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

renderCommentbean 内部的布尔属性。 setRenderComment 基本上像这样切换renderComment 的状态

this.renderComment = !this.renderComment;

对,每次我点击链接Hey,我都需要刷新以打开或关闭渲染hello。如何修复它,这样我就不需要刷新了

【问题讨论】:

    标签: java jsf primefaces


    【解决方案1】:

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

    您的问题可能是由于在 HTML 页面上找不到要重新渲染的组件(即 更新)。如果您的rendered 属性等于false,那么带有comment id 的&lt;SPAN&gt; 集成在生成的HTML 页面中。因此,当客户端收到 Ajax 请求时,Ajax 引擎无法刷新此&lt;SPAN&gt;,因为它没有找到。

    所以您可以做的是始终呈现您的panelGroup 并将您的rendered 属性移动到包含Hello 消息的嵌套&lt;h:outputText&gt;

    这是我的建议:

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

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

    【讨论】:

    • 谢谢。有用 :)。我之所以使用panelGroup 是因为,我有很多组件我想使用一个rendered 属性来打开或关闭render。如果我必须这样做,我想,我还不如把panelGroup 拿出来。非常感谢人:D
    【解决方案2】:

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

    应该这样做:

    <p:commandLink value="Hey"
        actionListener="#{bean.setRenderComment}"
        update=":comment" />
    

    【讨论】:

    • 哇哦。我不知道update 只能在同一级别上工作。如果我有多个级别怎么办。我尝试::comment,但它不起作用。请你看看我更新的帖子好吗?
    • @Harry: romaintaz 已经确定了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2016-02-20
    • 2011-12-12
    • 2011-09-28
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多