Java Struts 2 Acion类多实例

Java Struts 2 Acion类多实例,java,struts2,prepared-statement,struts2-interceptors,Java,Struts2,Prepared Statement,Struts2 Interceptors,我像下面那样加载对象userData,以便在JSP上显示它。(稍后将使用Register()方法类型GET从数据库加载它) 接下来,我在JSP上填充另一个userData字段,然后单击register 然后方法Register()再次启动,但不要使用相同的registationAction 例如,attribute1仍然是1而不是2 示例: public class RegistrationAction extends ActionSupport{ int attribute1=0

我像下面那样加载对象
userData
,以便在JSP上显示它。(稍后将使用
Register()
方法类型
GET
从数据库加载它)

接下来,我在JSP上填充另一个
userData
字段,然后单击register

然后方法
Register()
再次启动,但不要使用相同的
registationAction

例如,
attribute1
仍然是1而不是2

示例:

public class RegistrationAction extends ActionSupport{
       int attribute1=0;
       public String Register() throws Exception {
           attribute1++;
           if(request.getMethod().equals("GET")){  //load object to form
              user=new UserData();
              user.setName("lucas");
               return NONE;
           } 
            //else POST -> save()
      }
}

那么,我应该如何启动同一个操作实例呢?

您不应该启动同一个实例。同一实例不会是线程安全的

每个请求生成一个新的操作实例,您必须在结果视图之前对其进行初始化

你可以用它来做

要使三个操作在调用之间共享数据,需要使用
Preparable
从会话中填充字段来准备模型,或者使用会话对象引用为字段提供默认值来保存字段

public class RegistrationAction扩展了ActionSupport实现了可准备的SessionAware{
公众假期准备(){
user=newuserdata();
user.setName(“lucas”);
attribute1=会话.get(“attribute1”);
}
私人Map会议;
@凌驾
公共无效设置会话(映射会话){
this.session=会话;
} 
int attribute1=0;
公共字符串寄存器()引发异常{
属性1++;
会话.put(“attribute1”,attribute1);
if(request.getMethod().equals(“GET”){//将对象加载到表单
回归成功;
} 
//else POST->save()
}
}

最大值,IMHO。请定义您真正需要做什么,我相信这不会涉及访问ThreadLocal一次性操作的同一个实例。如果您需要跨多个调用记住值,那么会话就是您的friendNew request=new action实例。将数据存储在某个地方或将其传递给新请求。我还建议您使用会话属性来满足此要求。您需要在会话中输出数据,可能这个插件也可以帮助您:D它有一些编译器错误(与往常一样),但重点是解释其他事情。