JSF2.2試してみた - 基本編

わけあって JavaEE7(JSF2.2)を使う機会に恵まれたので、あれこれ触って思ったことを残しておく。よくよく考えたら、ここ数年、いわゆるモダンなWebフレームワークをちゃんと使ったことが無いので、ここで述べる不満がJSFに限った話ではないのかも知れない。

前置きはこれくらいにして、まずは基本として、JSFでどうやって画面を作るのか試してみた。ちなみに、きちんと整備する余力がなかったので、IntelliJのプロジェクトのままです。いずれは、GradleでJavaEEのプロジェクト作るの、どうするのかも興味あるので、Gradle化するかも。

作った画面は1つで、左辺と右辺に数字を入れて足し算した結果を書き出すというスーパー簡単なやつ。せっかくなので計算結果はずっと残す。で、いきなり躓いたのが用語。Facelet(xhtml)から呼び出す、オブジェクトはなんて呼べば良いんですかね?

ちなみに、JSF管理ではなくCDI管理にしてる。自分で試してる分には困らないんだけど、人に説明するとき用語がはっきりしないと困る。ここでは管理ビーンって言うことにする。(´・ω・`)

それはさておき、作ったプロジェクト全体はこいつ。


今回は、そのうち基本の基本だと思う、JSFのサンプルでよく見る普通っぽい(?)管理ビーン


JSFのイヤなところって、これくらいの簡単なやつでも実装のバリエーションがたくさんあって、どれが正解(鉄板)なのかすらありそで無いってところ。

今回はこう(↑)したけど、これだって、こんくらいのツッコミどころがある。

  • 左辺、右辺、答えをCalcに抜き出さず、CalcViewにインライン展開してても良いじゃない。
    • CalcViewがgetter/setterだらけになるのがイヤ(Lombokは無しで)。
  • CalcをなんでCDI管理にしてないの?

この時点で気に入らないのは、何においても名前・名前・名前。CalcViewがいわゆる「コントローラ」に当たるのだと思うのだけれど、ホントにそうなのか? faceletsに値を貼り付ける属性(getter/setter)と、commandButtonタグのaction属性に指定するメソッドは、それぞれなんて名前で呼べは良いの?と悩みは尽きないw

あと、個人的な好みでこうしたけど、それだって正解かどうかなんてわかんない。

  • CalcViewがgetter/setterの塊になるのがイヤだったので、データはデータでCalcオブジェクトに抜き出した。これだって、なんて名前で呼べばいいんだ?ちょっと古いけどDTOとか言えばいい?
  • CalcだってCDI管理にしても良かったけど、無駄にCDI名前空間を消費する気になれなかったので、CalcViewのメンバ変数で済ました。
  • CalcViewのアクションメソッドであることが分かるように、メソッドの接頭子に「do」って付けた。なんかオッサン臭いけど、オッサンだからいいや。:-P
  • 計算結果を累積して持っておきたかったのでCalcViewのスコープをViewScopedにした。ホント言えば、ListだけがViewScopedであれば十分なのだけれど、どうしたらそうできるのかわからんかった。

たぶん、JSFに正解なんて無くて「お前がそう思ったら正解なんだろ。お前の中ではな」って事なんだろな。
あとバリデータの事を書いておきたいけど、力尽きたのでまた今度。