ManagedBeans を使用してプロジェクトを作成していますが、コンストラクターの複数の呼び出しと Bean の複数のインスタンスという問題があります。テスト Bean のソース:
@Named(value = "newJSFManagedBean1")
@SessionScoped
public class NewJSFManagedBean1 implements Serializable {
static private int createdcount = 0;
public NewJSFManagedBean1() {
createdcount++;
System.out.println("Constructor.createdcount = " + createdcount);
}
public String getMessage() {
return this.getClass().getName() + ".createdcount=" + createdcount;
}
public void preRenderBean(ComponentSystemEvent cse) {
}
}
この場合、コンストラクターは 1 回呼び出されます。
<h:body>
<h:outputText value="#{newJSFManagedBean1.message}"/>
</h:body>
結果は : createdcount=1 - それでOKです
しかし、タグ f:event を追加すると、ManagedBean のコンストラクターが複数回呼び出されます。
<h:body>
<f:event listener="#{newJSFManagedBean1.preRenderBean}" type="preRenderComponent"/>
<h:outputText value="#{newJSFManagedBean1.message}"/>
</h:body>
結果は次のとおりです。createdcount= 3 - なぜですか?
ありがとう。