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