假设我有两个方法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对象。
答案 0 :(得分:0)
使用spring form数据绑定技术将请求对象传回submit()。并且不要使用会话来存储属性,因为无论是通过弹簧形式数据绑定都可以轻松实现,为什么要浪费额外的会话内存。
但是还有一个有趣且更好的解决方案。那就是使用flash-attribute / Redirect-attribute :)