我对ModelAttributes的范围有一个快速的问题。
开发。环境:Spring MVC 3.1 / Java 6 / JSP w / JSTL for Views
在我的控制器中,我通过
为模型添加了一个属性model.addAttribute(“appForResubmission”, appForResubmission);
在JSP中(响应GET请求而提供)我将其内容读作:
${appForResubmission.appId}
- 工作正常,数据按预期显示在JSP上。
提交JSP后,在同一个控制器中以不同的方法(响应PUT请求),我尝试从模型中读取任何更改的属性,我这样做
@ModelAttribute(“appForResubmission”) Application app
在方法签名中。
但是,当我尝试查询对象的数据时,我得到的只是一个新的Application对象。 Spring的文档说明当模型中不存在请求的属性时,会发生这种新对象的实例化。
什么会导致属性丢失?有任何想法吗?我怀疑这是一个范围问题,但我不确定问题出在哪里。
非常感谢您提供的任何指示?
谢谢你, M. Reddy
答案 0 :(得分:1)
modelattribute
的范围是request
,在内部它只相当于HttpSerletRequest.setAttribute("model", model)
。
如果您希望模型在不同的控制器中可用,您可能有两个选项,一个是根据您提交给控制器的内容或使用持久源来重建它。第二个选项是使用@SessionAttribute({'modelname'})
将特定模型属性添加到会话中,但是请注意,您必须调用SessionStatus.complete以删除稍后添加到会话中的模型。