JSF試してみた?

ネタ元
http://kikutaro777.hatenablog.com/entry/2014/06/24/040645

もともとCDIの勉強用に作ったプロジェクトなので、つっこみとしては非常に不適切なのですが、一応。

もうとりあえず、JSFは以下の通りに作っておけばよいと思います。

  • ui:composition(≒xhtml)単位で管理ビーンを作成する。
  • 管理ビーンは原則ViewScopeにする。RequestScopeは使わない。
  • 変に画面遷移せずにajax使いましょう。

ui:compositionごとに管理ビーンを作成するのはMVVMを意識して。JSF自体実は画面のタグをプログラムから生成して動的にコンポーネントツリーを書き換えたりできるので、ui:composition毎に作成しておくと便利です。
管理ビーンを複数の画面で使いまわしたりとかあまりしない方ががが。
アプリケーションの部品化という意味では非常に良いと思うのですが、あまり細かくしすぎても面倒くさいだけです。。。

JSFで苦労することの半分以上はViewExpiredExceptionに関わる個所と言われるぐらい*1ViewScopeに依存したつくりになっているので、無理してRequestScopeを使うよりもViewScopeにしてしまった方が色々な不具合からは離れていられる気がします。
その分メモリ積んで欲しい。
で、ViewScopeを多用するとSinglePageApplicationっぽくなってくるので、必然的にajaxを使う事になります。JSFだとajaxによる部分再描画が非常に簡単にできるようになっています。
f:ajaxって入れるだけ。
https://github.com/megascus/JSFSample-01-managed-beans/blob/master/src/main/webapp/calc.xhtml#L21
※ちなみにこれはIE6でも動きます。
ajaxだとViewScopeは生き残り続けるので非常に相性良いです。ViewExpiredExceptionとはなんだったのか!

とりあえずこんな感じで。
https://github.com/megascus/JSFSample-01-managed-beans

*1:megascus調べ