最近の流れだと(どこの流れ?)Actionを作る時に
いちいちインタフェースを作らないので、Mayaa + S2Strutsでも同じようにしたい。
、、、と思って何も考えずに試してみたら、
アクション /employeeEdit に対応するマッピングが見つかりません
みたいなエラーで怒られた。
どうやら、Actionのマッピングを自動生成する所で失敗している模様。
よく見てみると、StrutsActionForwardを指定しているプロパティへの
Field#getで失敗していた。
なるほどねー、
interfaceだったらField#get(Class)で値を取れるけど、
普通のクラスだったらダメなのねー、って当然だよね。
だから、こんな風に変更してみた。
public interface EmployeeEditAction { @StrutsActionForward(path = "/pages/employee/employeeEdit.html") public String ERROR = "error";
フィールドをstatic finalにして、
public class EmployeeEditAction { @StrutsActionForward(path = "/pages/employee/employeeEdit.html") public static final String ERROR = "error";
これで動くようになりました。
おまけに、InitActionとActionを一つにまとめるようにしたら、
1つの画面に対するファイルが
- HTML
- Mayaa
- Action
- ActionForm
だけになりました。(3つも減った!)
あ、ただ一つだけ注意点があって、インタフェースを作らないなら
AOPを設定する時には、pointcutを必ず指定すること。
pointcutを指定しないと、setter/getterを含む、
全てのpublicメソッドにアクセスした時に、Interceptorが動いちゃうので。
メソッド名は「do、go、jumpから始まる」とか「set、get以外から始まる」みたいな
ルールを決めれば良いんと思うんですけどね。