2013-01-24 37 views
0

我正在使用Spring 3.1並使用驗證的網頁。現場級別驗證和錯誤顯示可以正常工作。我的問題是模型屬性在驗證表單顯示過程中不可用。驗證期間無法訪問模型屬性

比方說,我有代碼:

@RequestMapping(value="/edit", method=RequestMethod.GET) 
public String getEdit(@RequestParam("id") Long id, Model model) { 
    model.addAttribute("mytitle", "Hello There"); 
    return "editObject" 
} 

@RequestMapping(value="/edit", method=RequestMethod.POST) 
public String postEdit(@RequestParam("id") Long id, @Valid @ModelAttribute("object") MyData object, BindingResult result) { 
    if(result.hasErrors()) { 
     return "editObject"; 
    } 
    [snip] 

} 

如果我有檢測到hasErrors()的錯誤和短路到地圖「editObject」。但是,模型屬性不可用。

我在這裏使用什麼?我試着給postEdit參數列表添加一個Model引用,並再次添加諸如「mytitle」屬性之類的東西。

謝謝, 傑羅姆。

+0

哪些屬性不可用? – axtavt

+0

在我的實際程序中,我傳入了一些Java對象,並使用它們的值在JSP頁面中顯示。在這個例子的上下文中,JSP網頁將顯示「mytitle」屬性。當JSP頁面重新顯示以顯示驗證錯誤時,「mytitle」不可用於顯示。在處理POST事件的上下文中,將諸如「mytitle」之類的東西放到JSP頁面中是我的總體問題。 –

回答

0

postEdit控制器呈現editObject視圖時,您處於新請求中,因此您丟失了model(以前設置爲getEdit操作)。

你需要做的是重新設定在需要的任何值,新model

@RequestMapping(value="/edit", method=RequestMethod.POST) 
public String postEdit(@RequestParam("id") Long id, @Valid @ModelAttribute("object") MyData object, BindingResult result, Model model) { 
    if(result.hasErrors()) { 
     model.addAttribute("mytitle", "Hello There"); 
     model.addAttribute("object", object); 
     return "editObject"; 
    } 

如果你需要保持在例如會話,你可以存儲這些不同意見的屬性(使您不必爲每個新請求重新設置它們)。

+0

是的,那是我需要的答案。還有一件事我發現我需要 - 當需要顯示全局錯誤時,將標記放在標記內。看起來很明顯,一旦它被解釋(我在其他地方找到了答案在stackoverflow中),但它需要一段時間才能讓我看到光。 –