我正在尝试呈现以下 JSF 页面:
<h:form id="form" prependId="false">
<h:panelGrid width="100%">
<h:panelGroup id="tableDiv" layout="block">
<h:panelGroup layout="block" style="text-align: center;">
<p:dataTable id="table" var="_item"
value="#{primeBean.findTableModel()}">
...
</p:dataTable>
</h:panelGroup>
</h:panelGroup>
<h:panelGrid columns="2" width="100%">
<h:panelGroup id="barChartDiv" layout="block">
<p:barChart id="barChart"
value="#{primeBean.findCartesianModel()}">
<p:ajax event="itemSelect" listener="#{primeBean.handleItemSelect}"
update="pieChartDiv,tableDiv" />
</p:barChart>
</h:panelGroup>
<h:panelGroup id="pieChartDiv" layout="block">
<h:panelGroup layout="block">
<p:pieChart id="pieChart">
<p:ajax event="itemSelect" listener="#{primeBean.handleItemSelect}"
update="tableDiv" />
</p:pieChart>
</h:panelGroup>
</h:panelGroup>
</h:panelGrid>
</h:panelGrid>
</h:form>
当我点击任意栏时p:barChart
,我希望 update 属性中的组件将按照我声明的顺序呈现(pieChartDiv,tableDiv)
,但它们以相反的顺序呈现(tableDiv,pieChartDiv)
.
这是正常行为吗?如何按照物品声明的顺序更新组件列表?
这是不可能的。组件的搜索和更新顺序与它们在 JSF 组件树中出现的顺序完全相同。
一种方法是重新排列/交换树层次结构中的两个组件,并借助 CSS 直观地重新定位它们。然而,这是相当笨拙的。
另一种方法是在第一个组件更新完成后更新第二个组件(因此实际上会得到 2 个 ajax 请求,而不是 1 个)。您可以在以下帮助下实现这一目标<p:remoteCommand> http://www.primefaces.org/showcase/ui/remoteCommand.jsf这是在完成时调用的<p:ajax>
.
所以,而不是
<p:ajax ... update="pieChartDiv,tableDiv" />
use
<p:ajax ... update="pieChartDiv" oncomplete="updateTableDiv()" />
...
<p:remoteCommand name="updateTableDiv" update="tableDiv" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)