2013-01-03 69 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上。 –