2012-09-26 53 views
1

我有一個MVC彈簧應用程序,用戶登錄後,它存儲了User @ SessionAttribute,我隨後會參考它。當在POST請求中更新Customer對象時,我希望將會話用戶信息添加到此對象中。 我的問題是,當我訪問客戶POST中的@ModelAttribute(「user」)User對象時,spring已經將請求參數綁定到它,即User.name具有來自提交表單的Customer.name的值。我如何防止彈簧mvc覆蓋會話屬性請求

NB我有種破解這個,所有控制器都是我的AppController的子類,這是@SessionAttributes聲明的地方。但是,如果它是一個單一的控制器,原則將是相同的。

因此,我可以防止彈簧綁定形式:客戶名稱值爲User.name?

(我懷疑的Webflow將是這個更合適的框架,但沒有可用的時間,現在使用這種重寫)

回答

1

可以允許或禁止某些領域的結合使用的模型屬性@InitBinder

@InitBinder("user") 
public void configureBindingOfUser(WebDataBinder binder) { 
    binder.setAllowedFields(); // No fields allowed 
} 

不過,我不認爲這是使用@SessionAttributes存儲當前用戶或其他類似的對象是個好主意。 @SessionAttributes最初設計用於維護GETPOST請求之間的表單支持對象的狀態,而不是作爲訪問會話的通用方式。

也許最好是使用session -scoped bean或自定義參數解析器來訪問這類信息。

+1

謝謝。我最終明確存儲在HttpSession中。這是舊的skool,但我也是。 – souter