あれから2年半後の結果を考える

http://d.hatena.ne.jp/shot6/20070405

8割くらいは改善したかなぁという感じかな。

  • デフォルトのViewはXHTML

faceletsがデフォになったので一応○。

  • JSPタグへの依存の排除

カスタムタグベースは変わってないけど、faceletsになってかなり柔軟に。jsfc属性とか複合コンポーネントの存在は大きい。

  • FacesContext

メソッドが大量に追加されています。


  • EL

JSF 1.2の時点(JavaEE5)でJSPのELから汎用APIとしてのELになってる。今ではJavaEE6としてメソッドの呼び出しが可能に。

  • RendererAPIの整理

変わって無い気が。

  • LifecycleのCoR化

変わって無い気が。でも、レンダーレスポンスのフェーズだけは独立したものという意識が必要。Ajaxサポートによって部分レンダリングされるようになったので。

  • Managed-beanの初期化などのライフサイクルメソッドの提供

初期化タイミングは相変わらず。ライフサイクルのメソッドは自由に書けるようになった。バリデーションが終わった後にこのメソッドを呼び出すとかがさくっと。相関パラメータチェックがかなりしやすくなってる。

  • Ajaxとの親和性

コンポーネントがすべてAjax対応はいいとして、既存のJavascriptから呼ぶことも可能。ある程度のコントロールは出来るようになったかな。DWRとか外からいじるというのがなくなった。

  • ValidatorやConverterのtarget指定

BeanValidation対応して、バリデーショングループが設定可能に。こっちのボタンを押したときはこのバリデーションが掛かるけど、こちらのボタンではかからないとかが可能。今まではJSFの実装でこういった感じのものは持っていた。

  • Managed-beanのAPI

アノテーションによる設定以外とくになし。XMLレスになったくらい。でもCDI対応してるので十分とも。

  • Scope

追加はFlashとViewスコープですね。そのほか拡張手段も用意されています。が、CDIあるんで会話スコープの拡張だけでいいかと。

  • NavigationRule

文字列を返すのはかわらないけど、拡張子等を排除可能。
"/hoge"とすると絶対パスで/hoge.xhtmlがよばれる。
"hoge"とすると相対パスhoge.xhtmlが呼ばれる。/foo/index.xhtmlを表示しているときに"hoge"を返すと/foo/hoge.xhtmlが呼ばれる。

"/hoge?faces-redirect=true"とすると"/hoge.xhtml"へリダイレクト(それ以外はデフォでフォワード)。

かなり扱いやすくなった。相対は結構いい。

これはもうないんじゃないですかね。

複合コンポーネントはfacelets部分だけですむようになったので(1.2用のfaceletsでは無理でした)だいぶ楽になったかな。

  • FacesServlet

フィルターはあくまでもフィルタリングする場所であってサーブレットが実行箇所である、というJavaEEの基本は貫いていると思います。JAX-WSJAX-RSなども同様です。フィルタだとHTTPに限らないようになっている(ServletはHTTP以外の用途も考えられていたのを引きずっている)のがガンとか。

フィルタの動作はコンテナによって挙動が変わる場合がウェルカムファイルであったのである意味心配とも。

作りにくいまま。ビヘイビア関連での改良が見られる?

さすがに追加されました。


個人的にはGTEパラメータ受け取りやGETによる画面遷移、Ajax標準化、よりよくなったfaceletsがデフォのViewあたりが実際にアプリを作るうえでかなり良いところかなと思うけど。フェーズで簡単にメソッド呼べるようになったのも大きいか。

この半分でも4年前のJavaEE5のとき実装してJSF1.5とかだったらよかったけど、それまでWebフレームワークをJavaEEに乗せてなかったというのであわてて入れた感じだったんだよね。JavaEE5なのにアノテーション一切なかったというあたりでお察しください。


個々まで変わるとさすがに使い勝手は別物ですが、JSF1.2の知識があるかどうかでいまからJSF始める人とでは結構差は出てるはず。ライフサイクルとかコア部分は基本変わってないですからね。逆に言えば使い勝手の良ささえちゃんとやればこれくらいの改善はされるということか。基本、JavaEEでは互換性が必須なのでそれをたもったままここまでいじれたのはすごいとも。