谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

インタフェースなしでActionを作る方法

最近の流れだと(どこの流れ?)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以外から始まる」みたいな
ルールを決めれば良いんと思うんですけどね。