smellman's Broken Diary

クソみたいなもんです

SAStrutsで継承元のvalidateメソッドにアクセスできない?

今日、仕事でこんなコードを書いた(かなりうろ覚えなので、間違っているかもしれないけど)。

class HogeAction {

    @ActionForm
    @Resource
    public HogeForm hogeForm;

    @Execute(validator=false)
    public String index() {
        return "index.jsp";
    }

    @Execute(validator=false, validate="validateMethod", input="index")
    public String common() {
        return "common.jsp";
    }

    public ActionMessages validateMethod() {
        ActionMessages messages = new ActionMessages();
        ....
        return messages;
    }
}
class FugaAction extends HogeAction {

}

構成的にはこんな感じ。

src/main
|-- java
|   |-- org.smellman.action
|   |   |-- HogeAction.java
|   |   `-- FugaAction.java
|   `-- org.smellman.form
|       `-- HogeForm.java
`-- webapp
    `-- WEB-INF/view/base
        |-- hoge
        |   |-- index.jsp
        |   `-- common.jsp
        `-- fuga
            |-- index.jsp
            `-- common.jsp

ここで、/Hoge で index.jsp にアクセスして common.jsp にアクセスする時に validateMethod() が呼ばれてエラーチェックが走る。
で、/Fuga でもまったく同様に common.jsp にアクセスする時に validateMethod() が呼ばれるのかと思ったら、エラーになってしまった。
SAStruts 1.0.4-sp4を使っていたのだけど、アクションの検証メソッドを呼び出せない問題を修正しましたというのを見つけて1.0.4-sp5なら大丈夫なのかな?と思って試してみたんだけど、やっぱりエラーになってしまう。
とりあえず、FugaActionをこんな風にしてみたら解決した。

class FugaAction extends HogeAction {

    public ActionMessages validateMethod() {
        return super.validateMethod();
    }

}

ただ、修正のログを見るとちゃんと呼ばれていそうな気がするので、なにか設定とか失敗しているのかもしれない。どこかでちゃんと検証してレポートをしてみたい。
というか、プロジェクトにつっこまれて三日目でこういう格闘とかキツいですね。で、納期は明後日ですって...