1

我有一个有两个列表变量的 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 请求中访问此模型属性的方法(不认为这是可能的)。基本上,用户看到的表单是绑定到模型属性的字段。然后有两个不同的“篮子”(列表),用户可以添加项目(控制器中的列表保存用户添加的对象)。我将物品添加到购物篮中的方式是通过 ajax 请求。

4

1 回答 1

1

您可以查看 Spring Webflow,也可以将模型属性设置为会话属性。

您可以如下注释您的课程

@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 Controller 默认是单例的,并发用户可能会相互干扰。

于 2012-09-11T12:15:36.430 回答