页面加载后加载面板内容

Nik*_*ola 3 jsf primefaces jsf-2

我有面板仪表板:

<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>
Run Code Online (Sandbox Code Playgroud)

dashboardOptionsMB.emsWidgets在渲染页面之前加载了一个包含内容的列表,这适用于面板组件:

panel.xhtml:

    <p:panel id="#{widget.widgetid}" header="#{widget.widgetheader}" closable="true" >
       <h:outputText value="#{emsValue.value}" />
       ...
    </panel>
Run Code Online (Sandbox Code Playgroud)

因此,在每次渲染之前,我使用此方法使用所有元素和内容初始化列表:

DashboardOptionsMB:

    private void initWidgets(WebDashboardsDbBean dashboard) {
      //dashboard is JPA entity from database
      emsWidgets = dashboard.getWidgets();
      ...
    }
Run Code Online (Sandbox Code Playgroud)

我想要实现的是在页面加载后动态加载每个面板内容.例如,每个面板应调用:

initWidget(String widgetId)
Run Code Online (Sandbox Code Playgroud)

页面加载后,以及此方法完成后更新其内容.

Xtr*_*ica 8

使用p:remoteCommand创造一些Ajax化的JavaScript将被执行的时候身体是装:

<h:body onload="loadWidgets()">
    <!-- content --> 
    <p:remoteCommand name="loadWidgets" 
        update="#{widget.widgetid}" 
        actionListener="#{dashboardOptionsMB.initWidgets}"/>  
</h:body>
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用autoRun="true"参数在文档准备好时执行它:

<p:remoteCommand name="loadWidgets" 
    update="#{widget.widgetid}" 
    actionListener="#{dashboardOptionsMB.initWidgets}"
    autoRun="true"/>  
Run Code Online (Sandbox Code Playgroud)

也可以看看: