日々精進

新しく学んだことを書き留めていきます

JSFのViewScopeの落とし穴

ViewScopeでやたらハマるので落とし穴をまとめた。

  • リクエスト毎にインスタンスが再生成される ViewScopeなのでURLが変わらないうちはインスタンスはずっと保持されるんだろうと思ったら、そうではないっぽい。 初回表示のGET時とPOST BACK時でBacking Beanのインスタンスが違う。勿論そのフィールド変数も違う。値は同じものが入っている。毎回serialize, deserializeされているようだ。 そうするとDDDでいうところのEntityをBacking Beanのフィールドに持たせるといつの間にか別のオブジェクトになっていてバグる。勿論ValueObjectなら問題無い。

  • ViewScopeなBacking Beanはrestore view phaseではまだ復元されていない。そのため、binding attributeなどでViewにバインディングするとエラーになる

参考:

http://balusc.omnifaces.org/2010/06/benefits-and-pitfalls-of-viewscoped.html