使用 f:ajax 渲染多个组件

Posted

技术标签:

【中文标题】使用 f:ajax 渲染多个组件【英文标题】:Render multiple components with f:ajax 【发布时间】:2013-05-11 22:37:52 【问题描述】:

错误代码是:

<h:form id="search_form">
<h:commandButton class="button" value="View" action="#InfoBean.search">
    <f:ajax execute="search_form" render="linear1"></f:ajax>
    <f:ajax execute="search_form" render="linear2"></f:ajax>
</h:commandButton>
<p:lineChart id="linear1" value="#InfoBean.linearModel1" legendPosition="e"/>
<p:lineChart id="linear2" value="#InfoBean.linearModel2" legendPosition="e"/>
</h:form>

我想要做的是当我点击commandButton 时,我想刷新这两个图表。但是现在我使用了两个&lt;ajax&gt;标签,其中第二个不起作用。

那么如何使用ajax来渲染两个图表呢?

【问题讨论】:

【参考方案1】:

您可以使用单个 f:ajax 渲染多个组件。只需确保您要更新的所有单个组件都具有id。在您的示例中,它将类似于:

<f:ajax execute="search_form" render="linear1 linear2"/>

ID 只需要用空格分隔,例如 linear1 linear2,而不是逗号分隔,例如 linear1, linear2(仅适用于 p:ajax)。

另请参阅:

Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"

【讨论】:

我想知道是否有一个解决方案来渲染将在运行时创建的多个动态组件 @electricalbah f:ajax 从服务器重新加载元素。如果“运行时”是指通过独立于服务器的 JS 创建的,则无法像这样更新它们。【参考方案2】:

对于 a4j jsf 使用 ',': &lt;a4j:support event="onchange" reRender="parent,child1,child2" /&gt;

【讨论】:

以上是关于使用 f:ajax 渲染多个组件的主要内容,如果未能解决你的问题,请参考以下文章

使用 f:ajax 时 JSF 不触发 bean setter

jsf ajax 部分渲染

JSF 复合组件 <f:ajax> 包含未知 id - 无法在组件的上下文中找到它

如何使用React-router渲染多个组件相同的路径路径

反应多个子组件的条件渲染

渲染包含 Google Charts 的多个 Livewire 组件,这些组件错误地都显示相同的数据