2013-01-03 68 views
0

我有一个关于ModelAttributes范围的快速问题。Spring MVC 3.1 - 模型属性丢失

Dev。 ENV:Spring MVC的3.1/Java的6/JSP W/JSTL的意见

在我的控制,我通过

model.addAttribute(“appForResubmission”, appForResubmission); 

添加到模型的属性在JSP(响应担任了GET请求)我读它的内容为:

${appForResubmission.appId} 

- 工作正常,数据显示在JSP预期。

一旦提交JSP的,在不同的方法中的相同的控制器(响应于PUT请求),我尝试读取来自模型的属性的任何变化和我这样做如

@ModelAttribute(“appForResubmission”) Application app 
方法签名中的

但是,当我尝试询问数据对象时,我得到的全部是一个新的Application对象。 Spring的文档说,当请求的属性不存在于模型中时,会发生这种新对象的实例化。

什么会导致属性丢失?有任何想法吗?我怀疑这是一个范围问题,但我不确定问题出在哪里。

任何你可以提供的指针非常感谢?

谢谢 M.雷迪

回答

1

一个modelattribute的范围是request,在内部它只是相当于HttpSerletRequest.setAttribute("model", model)

如果您希望模型在不同的控制器中可用,您可能有两种选择,一种是根据您向控制器提交的内容或使用持久性源重新构建它。第二个选项是使用@SessionAttribute({'modelname'})将特定模型属性添加到会话中,但要小心必须先拨打SessionStatus.complete以删除稍后添加到会话中的模型。

+0

谢谢你的回应。在我的情况下,我只使用一个控制器。我正在使用的两种方法被映射到相同的URL,除了一种方法响应GET,另一种方法响应POST。我在GET中添加模型属性,然后从JSP返回(通过POST),我试图检索相同的属性。 –

+0

是的,但是你有JSP中的字段来保存'Application'对象的所有字段,并且你将所有这些字段提交回处理'PUT'的方法,否则它们将不可用处理'PUT'的方法。 –

+0

是的,我有JSP中的字段... 。不是所有的字段都显示在JSP上。 –