2010-03-17 64 views
0

我有一個數據模型是這樣的:Spring MVC表單是否自動提交數據綁定子對象?

public class Report { 
    // report owner 
    private User user; 

    ... typical getter setter ... 

} 

public class User { 
    ... omitted for clarity 
} 

會發生什麼事是在創建報表時,將當前用戶設置爲報表用戶對象。編輯報表時,處理POST請求的spring控制器正在接收用戶對象爲空的報表。以下是我的控制器看起來像:

@Controller 
@RequestMapping("/report") 
public class ReportController { 

    @RequestMapping(value = "/edit/{id}", method = RequestMethod.GET) 
    public String editReport(@PathVariable Long id, Model model) { 
     Report r = backend.getReport(id); // fully loads object 

     model.addAttribute("report", report); 
     return "report/edit"; 
    } 

    @RequestMapping(value = "/edit/{id}", method = RequestMethod.POST) 
    public String process(@ModelAttribute("report") Report r) { 
     backend.save(r); 
     return "redirect:/report/show" + r.getId(); 
    } 
} 

我跑的東西扔在調試器,它看起來像在editReport方法的模型對象存儲滿載報表對象(我可以看到的報告裏面的用戶)。在表單jsp上,我可以執行以下操作:

${report.user.username} 

並且呈現正確的結果。但是,當我查看流程方法中的調試器時,報告r中傳遞的值爲空用戶。我不需要做任何特殊的數據綁定來確保信息得到保留嗎?

+0

春天是否簡單地從包含在窗體中的值中實例化一個新對象?因此,通過隱藏標籤丟失沒有嵌入到表單中的任何信息?或者我沒有正確設置。 – predhme 2010-03-17 16:43:03

回答

0

看來,除非被編輯的對象存儲在@SessionAttributes中,那麼spring將從包含在表單中的信息實例化一個新的對象。用@SessionAttributes(「report」)標記控制器解決了我的問題。但不確定這樣做的潛在影響。

相關問題