我正在尝试呈现以下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:ajax>的情况下调用<p:remoteCommand>
的帮助来实现这一点.
所以,而不是
<p:ajax ... update="pieChartDiv,tableDiv" />
使用
<p:ajax ... update="pieChartDiv" oncomplete="updateTableDiv()" /> ... <p:remoteCommand name="updateTableDiv" update="tableDiv" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。