[Seasar-user:15593] [SAStruts]@Executeでアノテートしたメソッドの名前がgetXXXXXの場合

Takeshi Motegi [E-MAIL ADDRESS DELETED]
2008年 9月 1日 (月) 18:49:32 JST


茂木と申します。

アクションクラスで@Executeでアノテートしたメソッドの名前を
getXXXXXというように頭に"get"をつけたものにすると、別の
メソッドを呼び出していても、getXXXXXが自動的に呼ばれて
しまうように見えます。多分、プロパティのアクセッサーと勘違
いされてしまっているのかなぁ?と憶測しています。

@Executeでアノテートしたメソッドは、自動的な呼び出しから
名前に関わらず除外した方が良いような気がしますがいかがでしょう?
(私などは、Ajax用の@Executeメソッドは"getXXXXX"というように
命名しがちなもので。。。)


※再現方法を以下に示します。
環境:
・sa-struts-1.0.4-sp1
・Java1.6.0_07
・Eclipse3.3
・Tomcat6

例えば、チュートリアルのAjaxActionの"hello"メソッドを"getHello"
メソッドに以下のように改名してから、
public class AjaxAction {

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

    @Execute(validator = false)
    public String getHello() {
        ResponseUtil.write("こんにちは");
        return null;
    }

http://localhost:8080/sa-struts-tutorial/ajax/index
にアクセスすると、ブラウザに”こんにちは”と表示されて、Tomcatの
コンソール上には↓のような例外が発生します(indexを呼んでいるのに、
getHelloが実行されている)。

致命的: サーブレット default のServlet.service()が例外を投げました
java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません
 at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
 at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
以下略

以上、よろしくお願いいたします。



Seasar-user メーリングリストの案内