ajaxとprimefacesレイアウトを使用してページを動的にロードしています。ここに私のページがあります。
index.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 のコンストラクターは 1 回しか呼び出されません。 これらのメソッドは、ページが初めて読み込まれたときに呼び出されることを意味します。ただし、ページが 2 回目に読み込まれたときに再度呼び出されることはありません。誰かが以前にやった、または見たことがある場合は、この状況に対処する方法を教えてください。
編集: Luiggi Mendoza のアイデアに基づいて Page1Bean と Page2Bean で @Viewscope を試しましたが、まだうまくいきません。@REQUESTSCOPEではうまく機能します(Luiggi Mendoza に感謝します) 。