如何在JSF2和Primefaces 2中实现部分导航

时间:2011-10-27 13:22:00

标签: jsf-2 navigation primefaces

我左边的面板包含指向不同页面的链接。右侧面板是应根据左侧面板中单击的链接使用新页面更新的面板。我希望它是一个ajax更新,以便左面板,页眉和页脚不刷新。我尝试使用ui:include但页面只在第二次点击时刷新。对该线程的引用是

ui:include in richfaces 4 only gets updated on second click

在JSF2和Primefaces 2.2.1中是否有任何替代方法可以实现相同的目的。 感谢

更新

<ui:define name="content">
    <h:form id="form_01">

    <div style="margin:0; padding:0; float:right; width:740px;background:#FFF; ">
        <p:outputPanel id="pagePanel">
            <ui:include src="#{panelMenu.currentPage}.xhtml"></ui:include>
        </p:outputPanel>
    </div>

    <div style="padding:0; float:left;">
        <p:panel  style="width:205px;" header="User Menu">
            <h:panelGrid columns="1">
                <p:commandLink update="pagePanel" action="#{panelMenu.setCurrentPage('/pages/group_message')}">
                    <h:outputText value="Compose"/>
                </p:commandLink>
                <p:separator/>
                <p:commandLink update="pagePanel" action="#{panelMenu.setCurrentPage('/pages/group_detail')}">
                    <h:outputText value="Groups"/>
                </p:commandLink>
                <p:separator/>

                </h:panelGrid>
        </p:panel>
    </div>
    </h:form>
</ui:define>

支持Bean

@ManagedBean(name="panelMenu")
@SessionScoped

public class PanelMenu {
private String currentPage = "/pages/group_detail";

public String getCurrentPage() {
    System.out.println(Thread.currentThread().getStackTrace()[1]);
    System.out.println(FacesContext.getCurrentInstance().getCurrentPhaseId());
    return currentPage;
}

public void setCurrentPage(String currentPage) {
    System.out.println(Thread.currentThread().getStackTrace()[1]);
    System.out.println(FacesContext.getCurrentInstance().getCurrentPhaseId());
    this.currentPage = currentPage;
}

}

1 个答案:

答案 0 :(得分:1)

以下是一个例子:

托管豆:

@ManagedBean
@ViewScoped
public class PartialNavBean {
    private String pageName = "/pages/group_member";

    public String getPageName() {
        return pageName;
    }

    public void setPageName(String pageName) {
        this.pageName = pageName;
    }
}

查看:

<p:panel id="leftPanel">
    <h:form>
        <p:commandLink value="Group member"
                       action="#{partialNavBean.setPageName('/pages/group_member')}"
                       update="rightPanel"/>
        <br/>
        <p:commandLink value="Group detail"
                       action="#{partialNavBean.setPageName('/pages/group_detail')}"
                       update="rightPanel"/>
    </h:form>
</p:panel>

<p:panel id="rightPanel">
    <ui:include src="#{partialNavBean.pageName}.xhtml"/>
</p:panel>

<强>更新

我尝试了以下内容:

public String getPageName() {
    System.out.println(Thread.currentThread().getStackTrace()[1]);
    System.out.println(FacesContext.getCurrentInstance().getCurrentPhaseId());
    return pageName;
}

public void setPageName(String pageName) {
    System.out.println(Thread.currentThread().getStackTrace()[1]);
    System.out.println(FacesContext.getCurrentInstance().getCurrentPhaseId());
    this.pageName = pageName;
}

输出如下:

INFO: pkg.PartialNavBean.getPageName(PartialNavBean.java:14)
INFO: RESTORE_VIEW 1
INFO: pkg.PartialNavBean.setPageName(PartialNavBean.java:20)
INFO: INVOKE_APPLICATION 5
INFO: pkg.PartialNavBean.getPageName(PartialNavBean.java:14)
INFO: RENDER_RESPONSE 6
INFO: pkg.PartialNavBean.getPageName(PartialNavBean.java:14)
INFO: RESTORE_VIEW 1
INFO: pkg.PartialNavBean.setPageName(PartialNavBean.java:20)
INFO: INVOKE_APPLICATION 5
INFO: pkg.PartialNavBean.getPageName(PartialNavBean.java:14)
INFO: RENDER_RESPONSE 6