Как добиться частичной навигации в JSF2 и Primefaces 2 - PullRequest
0 голосов
/ 27 октября 2011

У меня есть панель, которая содержит ссылку на разные страницы. Правая панель - это та, которая должна быть обновлена ​​новой страницей на основе ссылки, нажатой на левой панели. Я хочу, чтобы это было обновление ajax, чтобы левая панель, верхний и нижний колонтитулы не обновлялись. Я попытался с помощью пользовательского интерфейса: включить, но страница обновляется только после второго щелчка. Ссылка на эту тему

пользовательский интерфейс: включить в richfaces 4 обновляется только при втором щелчке

Есть ли альтернативный способ добиться того же в 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>

Фасоль

@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 Ответ

1 голос
/ 27 октября 2011

Вот пример:

Управляемые фасоли:

@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
...