Ajax树不加载页面



我尝试在点击ajax (PrimeFaces)三元组时使用ui:include替换页面。默认情况下加载的第一个页面加载正确,所有组件都是活动的,但是当我点击另一个树节点来显示另一个页面时,后一个页面加载异常,就像下面的对话框可见和页面手一样。

我觉得如果我可以强制页面部分重新加载作为默认的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>

具有侦听器动作的treeview组件。在节点选择时,我希望子页面能够适当加载

<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 {
    }
}

不要那样做。您正在以错误的方式使用JSF,从而导致重大灾难。

在这里解释整个生命周期是不可能的,但是—在您真正了解JSF之前—只要假设facelet页面不应该像HTML页面那样工作。

相反,它们应该像窗口应用程序一样工作,在那里你有一定数量的小部件,它们不会真正出现或消失——它们可以放在选项卡中,它们可以被禁用,但它们会保持在最初的位置。

如果要包含的内容数量有限,最简单的选择是将它们全部包含并添加一些渲染="#{gui;Current =='component1'}",因此只有一个组件可见。

相关内容

  • 没有找到相关文章

最新更新