私は現在、ごく最近 JSF 1.2 から JSF 2 (Mojarra 2.1.21 + Seam 2.3) に移植されたアプリケーションに取り組んでいます。
非常に多くの同様の構造を持つページが 1 つあります (これは正確な構文ではなく、EL がこの形式でコンパイルされないことはわかっています)。
<s:fragment rendered="aModel.typeAbc eq 'ABC'">
<ui:include src="...xhtml"/>
</s:fragment>
<s:fragment rendered="aModel.type123 eq '123'">
<ui:include src="...xhtml"/>
</s:fragment>
1ページのみの表現の評価結果が含まれています。式は常にモデルを使用して (インスタンスを「aModel」と呼びましょう)、ブール式を作成します。問題は、「aModel」が Model クラスまたはそのサブクラスのインスタンスになる可能性があることです。さらに進んで - どの式も、サブクラスの特定のインスタンスでのみ利用可能な値 (ゲッター) を使用できます。
- モデルには getType() メソッドがあります
- ModelAbc にはメソッド getTypeAbc() があります
- Model123 にはメソッド getType123() があります
これにより、異なるタイプのモデルの詳細を表示するために同じページを再利用すると、すべてが実行され、そのコンテンツが UI ツリーに挿入されるという状況が発生します。
次に、状態保存中に PropertyNotFoundException を取得します。これは、現在の「aModel」(モデル 123 型であるとしましょう) にメソッド「getTypeAbc」がないためです。
編集1:
状態の保存中に解決される EL 値は、「ui:repeat」で使用されるものです。
そして今、本当の質問:
- ここで使用されているのは正しい解決策ですか?
- 特定の 1 ページの状態保存を完全に無効にすることはできますか?
- そのような Page の状態をバックエンド側からプログラムでクリーンアップすることは可能ですか?
- JSF2 はレンダリングされていないコントロールの状態を常に保存しますか?
- この問題にアプローチする方法はありますか?
2を編集します。
BalusC からの回答 (および 2 ~ 3 のコメント) が既にありましたが、今は見ることができません。誰かがそれを削除しましたか?! もしそうなら、なぜその兆候がないのですか?