1.如果一个符合规则的Action类(类名以Action结尾或继承了ActionSupport类)没有一个名为execute的方法
(可以继承自ActionSupport类),则该类不会被识别为Action类,即使它有其他的返回String的公共方法,可以在该类上或该类中的任何公共方法(即使返回类型不是String)上标注@Action注解(可以标注在任何方法上),使其重新变回一个可用(可访问)的Action类。
2.注意,标注该注解的位置不同会产生不同的结果:
- 标注在类上,因为没有execute方法,直接访问该action会报错:java.lang.NoSuchMethodException: actions.Test3Action.execute()只能通过指定方法名的方式来访问。如:某方法名是test,则可以以actionName!test.action的方式访问。
- 标注在公共(一定要public的,其他方法将被忽略)方法上(可以是一个无返回值的void类型的,但这就意味着你无法设置一个result以及location来指定跳转的目的地)。
3.因此action方法并不强求返回值类型,但至少应该是String或void类型的。事实上,返回void的action方法仅可用于不要求返回值的ajax方法或直接使用HttpServletResponse返回数据流。
4.标注在某个方法上,就意味着该方法变成该action类的默认访问方法,即替换了默认的execute方法。其它方法则仍以指定方法名的方式访问。
EOF.
小插曲:忽然发现每次切换action路径访问时会重复执行一次新输入的action,很是疑惑,开始以为是程序的问题,多次测试后发现重复执行是在我输入地址栏后回车的一刹那,放慢输入后才发现是回车提交之前就已经访问到新的地址,原来是新版chrome惹的祸(我使用版本:18.0.1025.162 m),参见:
http://sina.lt/cxe
本文没有讲述action相关注解的具体使用,参见:
http://sina.lt/cxf
有关struts2-config-browser-plugin插件的使用参见:
http://sina.lt/cxg
关于拦截器注解的使用参见:
http://sina.lt/cxh
以及下方列出的链接:(本文链接均使用
http://sina.lt/缩短)
struts2 @ResultPath
http://sina.lt/cxj ,http://sina.lt/cxk