如何通过JSP携带请求对象而不诉诸会话?

时间:2017-04-09 15:46:53

标签: spring jsp spring-mvc

假设我有两个方法display()submit(),分别显示和提交我的表单。在它之间有一个由display()提供的JSP,我将保存。

我想将一个请求属性设置为一个对象,该对象将在提交时结转并可供我使用。这是一个复杂的对象。提交我失去了这个Req Attr。我是否需要使用Session(这是不合需要的)来继承这段数据?

我的理解是我们应该避免尽可能多地处理会话,这是不可靠和冒险的。

public ModelAndView display(HttpServletRequest request) throws Exception {

      MyComplexObj myComplexObj = getMyComplexObj();
     // Set Req Attr to a complex object
      request.setAttribute("myComplexObj", myComplexObj);
     // Return ModelAndView
     return new ModelAndView("form.jsp", "model", new Model());
}

public ModelAndView submit (HttpServletRequest request, @ModelAttribute("model") Model model) {
     request.getAttribute("myComplexObj"); // NULL - did not get carried forward
}

JSP:不包含引用/变量。

注意:我不能在JSP中使用隐藏字段来转发这些数据,它不是String而是Java对象。

1 个答案:

答案 0 :(得分:0)

使用spring form数据绑定技术将请求对象传回submit()。并且不要使用会话来存储属性,因为无论是通过弹簧形式数据绑定都可以轻松实现,为什么要浪费额外的会话内存。

但是还有一个有趣且更好的解决方案。那就是使用flash-attribute / Redirect-attribute :)