ということで、セッターゲッターの記述も不要になりました。
もう、素のStrutsは触りたくありません。
しかし、ごはん食べながら休憩がてらバイトコードいじくれるJavassist素敵。
プロパティも自動生成?
セッターとかゲッターとかも自動的に作ってしまえ、と。
アクセッサーってうっとおしいですよね。
XDocletもアノテーションもないStruts
他の人が作ったシステムをいじってて、struts-config.xmlを直接編集してあるので、
return mapping.findForward("menu");
とか書いてあってもなんのことやらで、わざわざ検索しないといけない。
新しく画面追加するときも、なんかそれっぽいところを探して定義を追加しないといけない。めんどくさすぎ。
こんなんやってられんっすね。
自作のStrutsアノテーションは、実装は終わって、使い方の説明やらDL用のアーカイブができれば公開できるんですけど、そいつがめんどくさいんですね。
でも、かなりいい感じです。
がんばってバリデータのアノテーションも作ったし。
pathとかJSPの自動割当を工夫したので、ふつうはアノテーションもinputの指定くらいしか必要ないので、そうとう楽々ストラッツです。
アノテーションを日本一使いこなしてる気分ですよ。
Strutsアノテーション、実装中
気晴らしにStrutsアノテーションを実装してみました。
で、アクションを「ResultAction」ていう名前で普通に作って「result.jsp」を作ると、「result.do」にアクセスして「result.jsp」が表示されるようになって、さらに「ResultForm」を作るとそれなりの入力が受け取れるようになったので、なんか変な感じ。
Strutsコワクナイヨ。
ここまではアノテーション必要なし。 で、inputとかアノテーションで指定できるようにして、あとはバリデータだと思ってたら、結構アノテーションの定義に工夫が必要で、それ以前にバリデータの設定どうやっていじるんだろうと思ってたら、「あんた"."足し忘れてるだろクレイグ」みたいな名前でapplicationスコープに登録されてた。
ということでまずはアノテーション関係ナシにバリデータをいじることを試してたんだけど、どうもうまくいかない。
やっぱり、こんな方法じゃだめなのかなぁと思いながらValidatorPlugInのソースとかCommons Validatorのソースとか追うんだけど、これでダメな理由はない。
結局ResultFormがValidatorFormを継承してなかったというオチでした。
il||li _| ̄|○ il||li
「ゼロコンフィグStruts」プラグイン
という名前で、アノテーション機能を省いて、デフォルト動作だけ行うようなものを作ってもそこそこ便利かも。
nameとかinputとか、最低限の属性はstatic finalなフィールドに持たせて。
続・Strutsアノテーション
作りこむ時間はないので定義だけ考えてるんですけど、実装次第ではActionFormは定義もアノテーションも必要なくなったりするので、かなり楽になりそうです。
public @interface StrutsAction { String path(); String success() default ""; Class form() default java.lang.Object.class; }
みたいな感じに定義しておいてクラスを直接指定するようにして、そのとき登録がなければmoduleConfig#addActionFormConfigかなんかやれば定義レス。
アノテーションって、こんな感じにしておけばクラス名を指定するような定義ファイルはかなり楽ができます。
補完をエディタの標準の仕組みでやってくれるのもやっぱりいいです。
HibernateとStrutsがアノテーション対応したので、あとはSpringをアノテーション対応にしたら、いい感じ。
Springには後付けで定義追加するプラグインの作り方が見当たらなかったので、実物いじる必要がありそうですけど。
ただ、アノテーションを工夫すると、かなり記述量が減るので、ものすごく面白いことになりそうです。