我的问题是 RichFaces reRender 不适用于元素树中当前元素的“下方”;只有上面的元素会被重新渲染。

有什么方法可以使用 AJAX 访问较低的元素吗?

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

编辑 我将这个问题编辑为更普遍的问题。如果对原始问题感兴趣,请参阅修订版。

有帮助吗?

解决方案 2

下面是其中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

希望这有助于!

其他提示

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

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

更新:

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

重新呈现可以指向任何组件形式之外的为好。例如,这作品:

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

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

有关我的MyFaces + RichFaces的应用程序,<rich:panel>标记无法作为在所选择的答案描述工作。当我把它改成<a4j:outputPanel ajaxRendered="true" />,它开始工作作为这里给出的“ 时不重新描绘

配置:MyFaces的2.1.10(使用了Facelets模板)和RichFaces的4.2.3。

希望这将有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top