gus*_*max 4 ajax jsf primefaces jsf-2
我正在尝试呈现以下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>
Run Code Online (Sandbox Code Playgroud)
当我单击任何一个栏时p:barChart
,我希望update属性中的组件将按照我声明的顺序呈现(pieChartDiv,tableDiv)
,但它们以相反的顺序呈现(tableDiv,pieChartDiv)
.
这是正常的行为吗?如何按声明项目的顺序更新组件列表?
Bal*_*usC 11
这种方式不可能.将按照与JSF组件树中显示的顺序完全相同的顺序搜索和更新组件.
一种方法是重新排列/交换树层次结构中的两个组件,并借助CSS可视地重新定位它们.然而,这是相当笨拙的.
另一种方法是在完成第一个组件的更新时更新第二个组件(因此有效地结束了2个ajax请求而不是1个).你可以<p:remoteCommand>
在完成后调用它来实现<p:ajax>
.
所以,而不是
<p:ajax ... update="pieChartDiv,tableDiv" />
Run Code Online (Sandbox Code Playgroud)
使用
<p:ajax ... update="pieChartDiv" oncomplete="updateTableDiv()" />
...
<p:remoteCommand name="updateTableDiv" update="tableDiv" />
Run Code Online (Sandbox Code Playgroud)