[英]spring mvc 3 - SessionAttributes doesn't seem to be working
我試了又試,但不知道這是怎么回事。
我是SessionAttributes的新手,但我認為這可以保留整個對象,並且當使用@ModelAttribute在方法中讀回該對象時,它將合並該對象(即,表單更改的對象)。 但是,我沒有看到這種現象。
任何幫助將非常感激。
以下是代碼中的相關內容:
@Controller
@RequestMapping("/user")
@SessionAttributes("user")
public class UserController
{
// ...
@RequestMapping(value = "/{login}", method = RequestMethod.GET)
public String profile(Model model, @PathVariable("login") String login)
{
// ...
model.addAttribute("user", user);
// ...
}
@RequestMapping(value="/{login}", method = RequestMethod.POST)
public String saveProfile(@ModelAttribute("user") @Valid User user, BindingResult result, SessionStatus status)
{
if (result.hasErrors())
{
return "user/index";
}
// ...
status.setComplete();
return "redirect:/user/"+user.getLogin();
}
您看到我可能錯過的任何東西嗎? 我花了將近一天的時間試圖弄清楚這一點,但事實並非如此。 任何幫助將非常感激。
更新:我知道了問題所在。 答案發布在下面。
我弄清楚了很多勞累之后的情況。 我希望這可以節省其他人的時間。
這里的根本問題是雙重的:
我已經設置了休眠驗證(請注意處理POST的方法中的@Valid注釋)。 驗證者注釋直接位於每個字段上(如下所示):
@NotNull私有字符串名稱;
這是我固定的方法。
我認為驗證器注釋是因果關系,因此我將驗證器注釋移到了方法中。 因此,代碼更改如下:
私有字符串名稱;
@NotNull公共字符串getName(){...}
我放回@Valid批注,並驗證驗證不再失敗。
希望它可以幫助某人並為他們節省一天的工作。 :)
我和Azeem有相同的問題,因為他沒有明確確認sessionattribute可用於“合並”原始表單支持對象和提交中的更改,所以我想指出的是,是對表單的更改提交合並到原始表單支持對象中。
如該方法中指出的那樣,可能存在一些問題
但是,當您具有復雜的表單支持對象時,這種方法非常有用,但是您只允許用戶更新表單中的一些對象圖成員,而不使用隱藏字段來維護表單元素中其余的復雜對象。
當在類上不使用@SessionAttributes(“ xxx”)注釋的情況下使用此方法時,返回的表單支持對象基本上為null,但由表單專門提交的成員除外。 這會使持久保存更新的對象非常困難,因為您必須自己將新的更新組合到原始對象中。 但是,通過使用sessionattribute,提交后提供的完整更新的表單支持對象使持久化對象圖變得更加容易。
我不希望spring將屬性表單會話和表單合並。 您應該將表單提交的用戶以及該用戶與會話分開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.