扩展Action的类的生存期是多少(Struts 1.3.10)?
public class AddProcessAction extends Action {
ProcBox procBox = new ProcBox();
@Override
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
procBox.addToProcBox((ProcessForm)form);
return mapping.findForward("success");
}
}发布于 2014-10-29 13:27:03
Struts 1.x操作是单个的,并且是应用程序生命周期的最后一步。
因此,它们必须是重新进入和线程安全。
除非您只有一个用户,否则上面的示例将无法正常工作。
需要创建ProcBox实例变量并将其存储在HttpSession中,这对于每个客户端都是唯一的。你可以使用这样的东西:
public class AddProcessAction extends Action {
private static final String PROC_BOX_SESSION_ATTR = "addProcessAction.procBox";
@Override
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
final procBox = acquireProcBoxFrom(request);
procBox.addToProcBox((ProcessForm)form);
return mapping.findForward("success");
}
private ProcBox acquireProcBoxFrom(HttpServletRequest request) {
final HttpSession httpSession = request.getSession();
ProcBox procBox = (ProcBox)httpSession.getAttribute(PROC_BOX_SESSION_ATTR);
if (procBox == null) {
procBox = new ProcBox();
httpSession.setAttribute(PROC_BOX_SESSION_ATTR, procBox);
}
return procBox;
}
}https://stackoverflow.com/questions/26630927
复制相似问题