JSFってどうやって使うのがいいんだろうか

最近、
http://hoshi.air-nifty.com/diary/2012/06/java-ee6java-ee.html
みたいな記事を読んだりしてJavaEEに興味が出てきて
Java EE 7 & GlassFish について語ろうにも参加したりしました。


で、JavaEEではフロントエンドの画面作成(MVC)はJSFのようです。
今まではこのブログでも取り上げているようなstruts2を使うことが多かったし、これからもしばらくは使うと思ってより詳しく勉強しようとしてましたが、ちょっとJSFも試してみました。


まず、struts2とJSFでは考え方が大きく違ってます。すごく簡単に言うとstruts2ではMVCでいうところのControllerがViewを呼び出しますが、JSFではViewがControllerを呼び出します。
JSFのような形態をコンポーネントベースというようです。(よく知らないのですが)VBの開発のイメージに近いようです。


JavaEE7とGlassFishの環境構築~JSFでの開発については
Java EE 7 入門 〜 NetBeansで始めるJavaEE7 First Tutorialあたりを参考にしてもらうとして、実際に簡単な画面遷移を実装しようとしたところなかなか大変でした。


どういうものを作ろうとしてたかというと、
「一覧画面」->(選択)->「詳細画面」->(POSTリクエスト)->「(リダイレクト後)実行結果」
のようなものです。
ただ作りながらモヤモヤ感が積もる一方でした。


http://dev.worksap.co.jp/Members/inoue_se/archives/55
この記事をそのモヤモヤ感の説明に引用させてもらいます。

JSFはリクエスト処理のデータバインディングを隠蔽します。データバインディングによりリクエストのパラメータ(一般にフォームのフィールド入力値)からBeanオブジェクト(JSFの用語を使うと、昔風にはBacking Bean、今風にはManaged Bean)を構築します。

ひとつ目の欠点は、JSFがURLを抽象化層の下に隠している点です。なぜならURLこそ、抽象化層が外に見せるAPIそのものであっていいからです。勘の良い人は気づくかと思いますが、この進化の系統樹の先のひとつがRESTful Webアプリ(サービス)です。宗教論争になるので、RESTfulだけが正義で、それ以外はダメだとまでは主張しません。個人的にもRESTがオンリーワンの選択肢とは思っていません。大事なのはURLをAPIとして意識することです。

もうひとつのJSFの欠点が、最近のJavaScriptのプログラミングの進化と衝突する点です。最近はクライアントサイドのJavaScriptMVCで(昔より)まっとうなGUIプログラミングモデルに進化しつつあります。JSFはこの動向と衝突します。なぜならJSFはクライアントサイドのJavaScriptのイベントを抽象化層の下に隠蔽する発想だからです。

とにかく何でもかんでもJSFの「抽象化層の下に隠蔽」されてしまって何がなんだか分からなくなります。
HTTPリクエスト/レスポンスヘッダを見ても何をやっているのか掴めないし、レスポンスボディを見てもform要素やjavascriptが何をどうするためのものなのかが掴めません。

発表でもうひとつ言わなかったのがJSFへのダメ出しです。別に政治的な意図があって言わなかったのではなく、論点をずらしたくなかったからです。ブログ記事なのではっきり書きます。JSFは嫌いです。JSF2でも同じです。JSF1に比べてJSF2は良くなっています。DIベースになって一見美しいです。デモやチュートリアルを見ていると一瞬騙されそうです。しかし、やはり嫌いです。しょせんJSFStrutsの進化の系統樹にある技術だからです。どんなに進化しても最初の出発点が違うので好きになれません。

私はここまで詳しくないし、全然調べ切れてないのでこう言うのも気が引けますが、現時点では嫌いと言わざるを得ないです。


Java EE 7 SDKの中のCode Sampleも見ましたがやっぱり良さが分からない。
これぞというサンプルプログラムがあれば教えてほしいものです。