2

我的问题是 RichFacesreRender在元素树中的当前元素“下”不起作用;只有上层元素会被重新渲染。

有没有办法使用 AJAX 访问较低的元素?

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

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

4

4 回答 4

8
  • reRender与提供id要重新渲染的目标对象一起使用(在同一命名容器内 -form最常见)
  • 应该是一个唯一的id字符串,根据 html 规范
  • reRender允许动态值 - 即reRender="#{myBean.currentItemsToRerender}

基于此,我认为您应该能够实现您想要的(尽管尚不完全清楚)

更新:

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

于 2010-01-28T15:28:45.330 回答
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

希望这可以帮助!

于 2010-09-16T14:21:33.213 回答
0

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

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

<h:panelGrid id="panel">
...
</h:panelGrid>
于 2010-08-16T22:30:51.730 回答
0

对于我的 MyFaces+Richfaces 应用程序,<rich:panel>标签没有按照所选答案中的描述工作。当我将其更改为 时<a4j:outputPanel ajaxRendered="true" />,它开始按照此处给出的“ <a4j:commandLink> Not Rerendering ”工作

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

希望这会有所帮助。

于 2013-02-07T04:24:34.263 回答