Spring 3 Controller的列表清空的私有变量。会话超时?

时间:2012-09-11 10:10:54

标签: spring session tomcat controller portlet

我有一个有两个列表变量的portlet控制器

private List<MyObject1DTO> list1;
private List<MyObject2DTO> list2;

在我的JSP中,我使用AJAX请求将对象发送回添加对象的控制器 根据用户提交的内容列出任何一个。当用户会话超时时,这些列表会发生什么?

有时用户完成向这些列表中添加对象(这是一个很大的形式)并且有 填写表格的其余部分并按下提交这些列表的验证(它们不能为空)失败。我想知道当用户填写表单并且它清除那些列表时会话超时。还有什么可能导致列表清空?

我做这个设计缺陷的方式是什么?有没有更好的方法呢?

这是一个非常大的形式,有很多领域。表单中有两个不同的部分,用于创建这些对象并通过AJAX请求将它们发送到列表。当我在控制器中处理ajax请求时,我无法访问模型本身,因此我可以将对象添加到模型中。所以我用控制器中的列表做了。

编辑:

@Controller("myController")
@RequestMapping("VIEW")
public class MyController {
  private List<MyObject1DTO> list1;
  private List<MyObject2DTO> list2;    
  @ModelAttribute(value = "myFormDTO")
  public MyFormDTO getMyFormDTO() {
  ....
  }
  // Controller mappings etc.
}

我有一个对象绑定为表示我的表单的模型属性。但这不包括在内 那些清单。因为我不知道在我用于向列表添加对象的ajax请求中访问此模型属性的方式(不认为可能)。基本上,用户看到的表单是绑定到model属性的字段。然后有两个不同的“篮子”(列表),用户可以添加项目(控制器中的列表保存用户添加的对象)。我将这些项目添加到购物篮中的方式是通过ajax请求。

1 个答案:

答案 0 :(得分:1)

您要么查看Spring Webflow,要么将模型属性设置为session attribue。

您可以按如下方式注释您的课程

@Controller("myController")
@RequestMapping("VIEW")
@SessionAttributes("myFormDTO")
public class MyController {
    ....
}

spring会将你的模型属性添加到会话中,从而可以在控制器方法中访问你的模型属性。

@RequestMapping("/ajax/addToList1")
public void ajaxAddToList1(@ModelAttribute("myFormDTO") MyFormDTO form, ....) {
    form.getList1().add(.....);
}

不要使用Controller成员变量(除非你使用@Scope注释),因为Spring Controllers是默认的单例,并发用户可能会相互干扰。