簡體   English   中英

Spring MVC @SessionAttributes混亂!

[英]Spring MVC @SessionAttributes confusion!

我正在使用2.5並通過注釋做所有事情。

我有一個簡單的表單,允許用戶編輯對象。 它后面的控制器創建對象並將其添加到GET上的模型,並在POST(提交)上處理更改。 它工作正常,但我不明白為什么。 該對象永遠不會顯式添加到會話中,並且對象的“id”不會傳遞給submit方法。 控制器的submit方法如何知道對象的“id”值?

出現這個問題的原因是我有另一個表單/控制器幾乎與上面的相同,但除非我將對象添加到@SessionAttributes,否則它不會“工作”。 區別在於此特定控制器使用的對象具有對延遲加載的另一個對象的引用(我在后台使用Hibernate)。 當我提交表單而不將父對象放在SessionAttributes中時,我得到一個DataIntegrityViolationException,因為我從不加載引用的對象。

當我將父對象添加到@SessionAttributes時,問題神奇地消失了。 我神奇地說,因為即使我把父對象放在GET上的會話中,我仍然沒有顯式加載引用的對象,所以它應該是null(或者是一個空的代理或任何發生的事情)。

世界上到底發生了什么? 我需要協助!

該對象很可能在提交階段重新創建。 id可以“存儲”在隱藏的表單字段中。

你應該小心會話屬性,我總是試圖避免它,除非我有一個很好的理由。 與Hibernate結合使用可以產生各種各樣的頭痛。

如果必須,請使用完全初始化的副本。

控制器的submit方法如何知道對象的“id”值?

控制器不知道“id”。 我認為Spring使用默認構造函數創建新對象,並將表單數據填充到其中。 Hibernate必須認為這是一個新對象,並使用新的id將其存儲到數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM