我左边的面板包含指向不同页面的链接。右侧面板是应根据左侧面板中单击的链接使用新页面更新的面板。我希望它是一个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;
}
}
答案 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