我正在使用 ajax 和 primefaces 布局动态加载页面。这是我的页面。
索引.xhtml
<p:layout fullPage="true">
<p:layoutUnit position="north">
<h1>Header</h1>
</p:layoutUnit>
<p:layoutUnit position="south">
<h1>Footer</h1>
</p:layoutUnit>
<p:layoutUnit position="west">
<h:form>
<p:menu>
<p:menuitem value="Page1" action="#{navigationBean.method('page1')}"
ajax="true" update=":main-content"/>
<p:menuitem value="Page2" action="#{navigationBean.method('page2')}"
ajax="true" update=":main-content"/>
</p:menu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center" >
<h:panelGroup id="main-content">
<ui:include src="#{navigationBean.page}.xhtml" />
</h:panelGroup>
</p:layoutUnit>
</p:layout>
NavigationBean.java
@ManagedBean
@SessionScoped
public class NavigationBean {
@ManagedProperty(value="page1")
private String page;
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public void method(String page){
this.page = page;
}
}
page1.xhtml
<h:outputText value="#{page1Bean.text}"/>
page2.xhtml
<h:outputText value="#{page2Bean.text}"/>
Page1Bean.java
@ManagedBean
@SessionScoped
public class Page1Bean {
private String text;
@PostConstruct
public void init()
{
System.out.println("\nPage1Bean @PostConstruct");;
}
public Page1Bean() {
text = "Page 1 BEan Text Variable";
System.out.println("Page1Bean Constructor");
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Page2Bean.java 类似于 Page1Bean.java。该代码工作正常,可以动态加载页面并使用 ajax。但问题是@PostConstruct 和 Page1Bean 和 Page2Bean 的构造函数只被调用一次。 我的意思是第一次加载页面时会调用这些方法。但是第二次加载页面时不会再次调用它们。因此,如果有人以前做过或看过它,请帮助我如何处理这种情况。
编辑:我已经根据 Luiggi Mendoza 的想法在 Page1Bean 和 Page2Bean 上尝试了@Viewscope,但仍然没有运气。它适用于@REQUESTSCOPE(感谢Luiggi Mendoza),但是如果将来我得到一些@SESSIONSCOPE bean怎么办?