我有面板仪表板:
<p:dashboard id="board" model="#{dashboardOptionsMB.model}">
<c:forEach var="item" items="#{dashboardOptionsMB.emsWidgets}">
<ui:include src="/pages/dashboard/panel.xhtml">
<ui:param name="widget" value="#{item.webDashboardDbBean}" />
<ui:param name="emsValue" value="#{item.emsValue}" />
</ui:include>
</c:forEach>
</p:dashboard>
我在呈现页面之前加载了包含内容的列表dashboardOptionsMB.emsWidgets
,这适用于面板组件:
panel.xhtml:
<p:panel id="#{widget.widgetid}" header="#{widget.widgetheader}" closable="true" >
<h:outputText value="#{emsValue.value}" />
...
</panel>
因此,在每次渲染之前,我使用此方法使用所有元素和内容初始化列表:
DashboardOptionsMB:
private void initWidgets(WebDashboardsDbBean dashboard) {
//dashboard is JPA entity from database
emsWidgets = dashboard.getWidgets();
...
}
我想要实现的是在页面加载后动态加载每个面板内容。例如,每个小组都应该致电:
initWidget(String widgetId)
页面加载后,以及此方法完成后更新其内容。
答案 0 :(得分:8)
使用p:remoteCommand
创建一些Ajaxified Javascript,它将在加载正文时执行:
<h:body onload="loadWidgets()">
<!-- content -->
<p:remoteCommand name="loadWidgets"
update="#{widget.widgetid}"
actionListener="#{dashboardOptionsMB.initWidgets}"/>
</h:body>
或者,您可以使用autoRun="true"
参数在文档准备就绪时执行它:
<p:remoteCommand name="loadWidgets"
update="#{widget.widgetid}"
actionListener="#{dashboardOptionsMB.initWidgets}"
autoRun="true"/>
另见: