0
我試圖在點擊ajax(PrimeFaces)treenodes時使用ui:include
替換頁面。默認加載的第一頁在所有組件都處於活動狀態下正常加載,但當我單擊另一個treenode以顯示另一頁時,後一頁加載異常就像下面顯示對話框和頁面。Ajax樹不加載頁面
我覺得如果我可以強制頁面默認部分重新加載nodeSelect
index.jsf
(被裝上登錄)
<p:layoutUnit position="west" size="270" header="Menu" collapsible="false" resizable="true">
<p:ajaxStatus style="width:16px;height:16px;">
<f:facet name="start">
<h:graphicImage value="../design/ajaxloading.gif"/>
</f:facet>
<f:facet name="complete">
<h:outputText value=""/>
</f:facet>
</p:ajaxStatus>
<h:form id="appsMainControl">
<ui:include src="/ui/appServices.jsf"/>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center">
<h:form id="centerControl">
<ui:include src="/ui/#{amb.appToGet}.jsf"/>
</h:form>
</p:layoutUnit>
樹形視圖分量與監聽行動。在節點選擇我想要的子頁面加載適當
<p:layoutUnit position="west" size="270" header="Menu" collapsible="false" resizable="true">
<p:ajaxStatus style="width:16px;height:16px;">
<f:facet name="start">
<h:graphicImage value="../design/ajaxloading.gif"/>
</f:facet>
<f:facet name="complete">
<h:outputText value=""/>
</f:facet>
</p:ajaxStatus>
<h:form id="appsMainControl">
<ui:include src="/ui/appServices.jsf"/>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center">
<h:form id="centerControl">
<ui:include src="/ui/#{amb.appToGet}.jsf"/>
</h:form>
</p:layoutUnit>
的支持bean:
public void onNodeSelect(NodeSelectEvent event) throws Exception {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
try {
appToGet = appsMainDAO.appToGet(event.getTreeNode().toString());
// ec.redirect("index.jsf");
// System.out.println("Got "+appToGet);
// appSubList = appsMainDAO.appsSubServicesList(appToGet, "Forms");
} catch (Exception ex) {
ex.printStackTrace();
Logger.getLogger(appsMainBean.class.getName()).log(Level.SEVERE, null, ex);
} finally {
}
}
謝謝dreger。我想你是對的。儘管同時我覺得在單頁上實現的效果會損害性能,因爲所有頁面將同時加載,並且只會渲染一個頁面。我通過將缺少的html和body標籤添加到UI:組合模板來實現它。我認爲index.jsf會將所有組件重新加載到默認值。謝謝一堆。 – Damilola
@Damilola:好的,它理解你所做的事情(涉及視圖範圍的bean的生命週期,導航等)的含義,然後繼續。順便說一句:相信你的感受並不一定是優化應用程序的最佳方式(儘管它肯定可行)。 – fdreger