使用RichFaces进行绝对重新渲染

时间:2010-01-28 13:55:03

标签: jsf richfaces rerender

我的问题是RichFaces reRender无法在元素树中的当前元素下工作;只有上层元素才会被重新渲染。

有没有办法用AJAX访问下层元素?

任何帮助将不胜感激! 丹尼尔

编辑我将此问题编辑为更一般的问题。如果对原始问题感兴趣,请参阅修订版。

4 个答案:

答案 0 :(得分:8)

  • reRender可以提供您想要reRender的目标对象的id(在同一个命名容器中 - 最常见的form
  • 根据html规范
  • id应该是唯一的字符串
  • reRender允许动态值 - 即reRender="#{myBean.currentItemsToRerender}

基于此,我认为你应该能够达到你想要的效果(尽管还不完全清楚)

<强>更新

UIComponent.findComponent(..)有一个定义明确的算法来解析id。因此,对于绝对引用,您的reRendered id应该 :开头,然后继续通过命名容器的层次结构。

答案 1 :(得分:3)

以下是changePanel111()更改较低元素内容的示例:

<h:form id="form" prependId="true">
    <rich:panel id="PANEL1">
        <h:outputText id="PANEL1TEXT" value="#{ajaxTestBean.panel1}"/>
        <rich:panel id="PANEL11">
            <h:outputText id="PANEL11TEXT" value="#{ajaxTestBean.panel11}"/>
            <rich:panel id="PANEL111">
                <h:outputText id="PANEL111TEXT" value="#{ajaxTestBean.panel111}"/>
            </rich:panel>
        </rich:panel>
        <rich:panel id="PANEL12">
            <h:outputText id="PANEL12TEXT" value="#{ajaxTestBean.panel12}"/>
            <br/>
            <a4j:commandLink value="CHANGE PANEL12" action="#{ajaxTestBean.changePanel12}">
                <a4j:support reRender="PANEL12" event="onclick"/>
            </a4j:commandLink>
            <br/>
            <a4j:commandLink value="CHANGE PANEL111" action="#{ajaxTestBean.changePanel111}">
                <a4j:support reRender="form:PANEL111" event="onclick"/>
            </a4j:commandLink>
        </rich:panel>
    </rich:panel>
</h:form>

请注意下层元素需要如何识别为form:PANEL111

希望这有帮助!

答案 2 :(得分:0)

reRender也可以指向表单外的任何组件。例如,这有效:

<h:form>
  <a4j:commandButton reRender="panel"/>
</h:form>

<h:panelGrid id="panel">
...
</h:panelGrid>

答案 3 :(得分:0)

对于我的MyFaces + Richfaces应用,<rich:panel>标记无效,如所选答案中所述。当我将其更改为<a4j:outputPanel ajaxRendered="true" />时,它开始按照此处“<a4j:commandLink> Not Rerendering

的方式工作

配置:MyFaces 2.1.10(用于模板化的Facelets)和Richfaces 4.2.3。

希望这会有所帮助。