勝手にWish-list for JSF2.0
最近JSF2.0の仕様について、議論されているようですが、
JSF実装を作った経験から、個人的なWish-listを再度整理して並べてみたいと思います。
ちなみにKito D. Mannさん(JSFCentralの人 & JSF in Actionの著者の方)のlistはこれ。
・デフォルトのViewはXHTML
まちがいなくJSPのViewではなく、XHTMLのほうが良いと思います。
・JSPタグへの依存の排除
できればTLDやタグリブは書かないですませる方向にしたほうが
よさそうです。というかJSPへの依存は排除してほしい。
・FacesContext
そこそこ良く出来ているFacesContextのAPIですが、
いくつかの点で使いにくいです。
例えばFacesMessageの破棄などが出来ない点です。
あとは何故かabstractクラスw
FacesMessageなんかもリソースを色々取れるような仕様にしたほうが良いきがするのだけど。
・EL
JSPのELではなく、自前のELのAPIを改善して欲しいですね。
特にMethodBindingはOGNLなんかに比べてしまうと貧弱なので。
特に、評価する部分は特にこちらで選べるようにしてほしいなあ。
・RendererAPIの整理
これはカスタムコンポーネントの作り手には実は一番重要かもw
今のAPIはしんどすぎます。Tapestryだと非常に詳細にRendererまわりの
ライフサイクルが定義されているのですが、それに比べるとJSFのRendererは
おおざっぱすぎるような気もします。TapestryのRendererが完全かといわれるとそうでもないのですが。
・LifecycleのCoR化
Lifecycleはそこそこ良く出来ていると思っているのですが、
いっそのことLifecycleの各PhaseはCoR(Chain of Responsibility)に
したほうがいいんじゃないかと思います。
今はがっちりとライフサイクルが仕様に記述されてしまっていますが、
それをプラグインのようにしてほしいかなあ。デフォルトは決まっていてもいいので。
・Managed-beanの初期化などのライフサイクルメソッドの提供
これはKitoさんも言っていますが、仕様として盛り込んで欲しいですね。
特に初期化のタイミングが定義されていないのは問題です。
あれば良いかなと思っているのは、初期化、破棄時、Validation前後とか、描画前後とかかな。
・Ajaxとの親和性
JSFのコンポーネントツリーとAjaxはあまり親和性が高いとはいえません。
コンポーネントツリーを動的に変えないような見た目だけしか
変えないAjaxであれば問題ありません。コンポーネントツリーを動的に変えるような
場合は、JSF実装のほうで結構がんばらないといけないのも事実です。
この点は改善されて欲しいな。
・ValidatorやConverterのtarget指定
Validatorがどのボタンで動くのかのtarget指定とかの機能は
仕様としてあったほうが良いです。
・Managed-beanのAPI
実は何もないManaged-beanのAPI。さすがに少しは作ったほうが良いと思う。
で、実装はS2なり、Springなり、Guiceなりにまるなげできるようにするべき。
・Scope
まあもっとあったほうがいいかな。
・NavigationRule
もうTeedaExtensionを使うと、めっきり書き方すら忘れるNavigationRuleですがw
正直いけてないです。XMLで書く機能はあってもいいですが、仕様としては
デフォルトはアノテーションを使うようにすべきかな。
・HTMLレンダリング意外の描画の汎用性
あー、これはあんま言いたくない部分もあるんだけどw、
JSFってHTMLの描画だけじゃない可能性を考えてるんだ、みたいなこと言ってるけど、
必要ないです。断言。まちがいない。
そんなことより、Webアプリケーション作るのにより快適でストレスなく出来るような
仕様にすべき。
・カスタムコンポーネントの作りやすさ
これももっと簡単になってほしい。今は正直そこそこ難しいと思う。
・FacesServlet
Servletじゃなくて、Filterベースにできないかな。
あとServletでもいいんだけど、finalクラスはやりすぎだと思う。
・UIコンポーネント
もう少し気楽に出来るのがいいんだけど。
もしくはUIComponentごとなくしてみるとか。デフォルトステートレスにするんであれば
そういう選択肢もなくはない。
・JavaScriptなどのリソースのAPI
忘れてた。JSFにはJavaScriptやCSSなどのリソースを読むAPIってのが
ありません。で、みんな独自実装してるのだけど、これは標準にすべきですね。