JSF 2.0:それがレンダリングされていない部品に使われているのに、なぜJSF Beanが作成されますでしょうか?
-
26-09-2019 - |
質問
レッツは、非常にシンプルな複合コンポーネントを持っています:
<cc:implementation>
#{testBean.someField}
</cc:implementation>
それのための豆ます:
public class TestBean {
private boolean someField = false;
public boolean getSomeField() { return someField; }
@PostConstruct
public void init() {
System.out.println("PostConstruct");
}
}
そして、いつものようにそれを呼び出すが、それを表示されません。
<codeEditor:test rendered="#{false}" />
何が起こることはコンポーネントが描画されることはありませんし、1が思うだろうとして、Beanが開始されることはありませんということです。
しかし、私たちのようにコンポーネントを変更する場合:
<cc:implementation>
<h:outputText value="#{testBean.someField}" />
</cc:implementation>
何が起こるかというと、しかし、Beanがインスタンス化されますん(rendered
属性がfalse
であるため)コンポーネントは、まだレンダリングされることは決してありませんということです。我々はいくつかのネイティブJSFコンポーネント(h:panelGroup
、h:inputHidden
、何でも)内のBeanのプロパティを使用する場合は、必ず起こります。
なぜそれはそうでしょうか?
解決
要素(および結合した豆の全てが)ビューのビルド時に作成されます。レンダリングされた属性は、レンダリング時間を表示中に評価されます。それは、常にJSFにそのように働いています。
豆は、建設中のいくつかの高価な仕事をしている場合は、は、その後、私は高価な仕事は、いくつかの条件に依存することを許可することをお勧めしたいこれを使用し、その後再利用rendered属性インチ
所属していません StackOverflow