2013-12-12 103 views
3

我有面板的儀表板:負載面板內容

<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) 

頁面加載後,當這個方法完成了更新的內容。

回答

4

使用p:remoteCommand創造一些Ajax化了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"/> 

另請參閱: