Struts2アクションのスコープ

Struts2のアクションをSpringでBean生成させるときに以前 "request"スコープを使用していた(Struts2のAction専用のスキャン用Annotationを作る - Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフレームワーク)が、s:actionや Resultの chain などでの内部から同じアクションが呼び出された時に、 スコープが"request"だと問題があった。

正しくは "prototype" にする必要がある

以前の

@Struts2Action("UserAction")
@Scope("request")
public class UserAction extends ActionSupport implements ModelDriven<User> {
	@Resource
	private UserDAO udao;
   :

このコードは

@Struts2Action("UserAction")
@Scope("prototype")
public class UserAction extends ActionSupport implements ModelDriven<User> {
	@Resource
	private UserDAO udao;
   :

とする必要がある

ちょっとTIPS:1リクエスト中で同じアクションが2回呼び出されない限り問題はない、また性能面でも"request"も"prototype"も1回生成されるだけなので違いはない