outjectionって分かりづらくね?
何って、Actionに作るgetterメソッドのことですよ。
Actionにgetterを作っておくと、S2Containerに管理されたり
管理対象じゃなければRequestスコープに入るわけですが。
S2JSFで最初に躓くのって、このoutjectionじゃないでしょうか。
outjectionにせず、requestにsetAttributeしてしまった方が
普通の開発者には分かりやすいのではないでしょうか。
つまり、public Hoge getHoge() って書くよりも、
request.setAttribute("hoge", hoge); って
書く方が分かりやすいのでは、ということです。
少なくともActionを書いている時には
オブジェクトのライフサイクルは「考える」でしょうから
「FW側でライフサイクルを変更できる」というメリットは、
実質、享受されないでしょう。
HttpServletRequestを渡すのが嫌なら、みんな大好き俺様Requestで。
RequestScope.set("hoge", hoge); と書けばOK、みたいな。
ついでに、injectionとかもやめちゃって、requestパラメータは引数渡し。
引数名はARGSアノテーションで指定すれば良いのではないでしょうか。
つまり、こんな風にしちゃえばいいと思うんですよ。
@ARGS({"userId", "dto"}) public String doHoge(String userId, XxxDto dto) { List groupList = xxxService.find(userId, dto); RequestScope.set("groupList", groupList); return "hoge2"; }
xxxServiceだけはテストしやすいようinjectionされます。
別に、publicでも構わないでしょう。
あと、DiiguとかIrenkaとか使えば
引数名も取れるようになるのかな?
public String doHoge(String userId, XxxDto dto) { List groupList = xxxService.find(userId, dto); RequestScope.set(groupList); return "hoge2"; }
こんな風になると、分かりやすいのではないでしょうか。
Pageクラス(≒HTMLのJava化)という概念ならまだしも
通常のStrutsライクなアーキテクチャなら
このように、引数の明確化、スコープの明確化を
行なった方が分かりやすいかな、と思いました。
では、Pageクラスが主流となった現在は、
どんな風に書けば分かりやすいのでしょうか。
それについてはATDK