我加载对象
userData
如下所示,以在 JSP 上显示它。 (稍后将从数据库加载)使用 Register()
方法类型 GET
。
接下来,我在 JSP 上填写
userData
的另一个字段,然后单击 register
。
然后方法
Register()
再次开始,但它不使用相同的RegistrationAction
。
所以例如
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来完成。
拥有在调用之间共享数据的三个操作需要使用
准备一个模型来填充会话中的字段,或使用会话对象引用为字段提供默认值以保存它们。Preparable
public class RegistrationAction extends ActionSupport implements Preparable, SessionAware {
public void prepare() {
user=new UserData();
user.setName("lucas");
attribute1 = session.get("attribute1");
}
private Map<String, Object> session;
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
int attribute1=0;
public String Register() throws Exception {
attribute1++;
session.put("attribute1", attribute1);
if(request.getMethod().equals("GET")){ //load object to form
return SUCCESS;
}
//else POST -> save()
}
}