Spring 3 Controller 的 List 类型的私有(private)变量为空。 session 超时?

标签 spring session tomcat controller portlet

我有一个有两个列表变量的 portlet Controller

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

在我的 JSP 中,我使用 AJAX 请求将对象发送回添加对象的 Controller 取决于用户提交的内容。当用户 session 超时时,这些列表会发生什么情况?

有时,当用户完成将对象添加到这些列表(这是一个大表格)并且有 填写表格的其余部分并按提交这些列表的验证(它们不能为空)失败。我想知道当用户填写表单并清除这些列表时 session 是否以某种方式超时。还有什么可能导致列表为空?

我这样做的方式是设计缺陷吗?有更好的方法吗?

这是一个非常大的表单,并且有很多字段。表单中有两个不同的部分创建这些对象并通过 AJAX 请求将它们发送到列表。当我在 Controller 中处理 ajax 请求时,我无权访问模型本身,因此我无法将对象添加到模型中。所以我用 Controller 中的列表来做到这一点。

编辑:

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

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

最佳答案

要么看一下 Spring Webflow,要么将模型属性设置为 session 属性。

你可以如下注释你的类

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

spring 会将您的模型属性添加到 session 中,由此您可以在 Controller 方法中访问您的模型属性。

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

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

关于Spring 3 Controller 的 List 类型的私有(private)变量为空。 session 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12367412/

相关文章:

java - Spring @Service 与对象服务

java - Spring 逗号分隔的 bean 引用列表

tomcat - 无法使用 %S 配置 tomcat 访问日志 session ID

java - Tomcat Servlet 安全性

java - Mac 上缺少 spring-boot-starter-web hibernate-validator 依赖项

java - DWR Spring-MVC 4.0.5 基于java的配置

php SetCookie 适用于 Firefox,但不适用于 IE

session - gorilla / session 在服务器重启之间持续存在?

javascript - 使用javascript sdk解析平台用户登录,但无法使用PHP SDK获取哪个用户登录

tomcat - 连接池失败时如何设置重试。