ActionでFormに対して処理をするときの私のコーディングスタイル
SAStrutsはActionクラスでActionFormを受け取るときは以下のように書く。
@ActionForm @Resource public FooForm fooBarForm;
ここで注意したいのが(SAStrutsユーザーなら誰でも知っているが)、ActionFormは名前でインジェクションされるということ。つまり、
@ActionForm @Resource public FooBarForm form;
じゃ、ダメだということ。この仕様はS2Containerの自動インジェクションの仕様をそのまま反映したものだと思うのだけれど、個人的には@ActionFormをつけてるんだから型から名前を推測してインジェクションしてくれてもいいのに・・・なんて思う(薄いラッパーであるための理由とかがあるんだろうか?)。
たかだか"fooBar"が余計に付くだけじゃないか!なんて思うかもしれないけど、Actionクラスの名前が長ければ必然と長くなるし、なによりActionクラスでActionFormに対して処理をするときにいちいち"fooBarForm.xxx"と書くのは可読性的にちょっと微妙な気がする。
そこで現状私は以下のようにコーディングしている。
@ActionForm @Resources public FooForm fooBarForm; @Execute(validator = false) public String bar() { final FooBarForm form = fooBarForm; ... }
私は最終的に"form"を採用したけれど、プロジェクト内で統一が取れれば"f"とか一文字にしてしまっても良いかもしれない。
ともあれ、なぜ型でActionFormをインジェクションする仕様にしなかったのかは気になるところ。ちょっとMLを過去ログとか、SAStrutsのソースを見てみようと思う。