2013-10-28 69 views
0

爲什麼我的ID沒有保存@ModelAttribute?爲什麼我必須將其作爲隱藏參數發送給我的表單?使用命令時不應該彈出這個句柄嗎?爲什麼我的ID沒有保存@ModelAttribute?

@RequestMapping(value="/{supplierId}", method=RequestMethod.GET) 
public String get(@PathVariable Long supplierId, Model model, Principal principal){ 

    Form form = .... //Got a an existing form from DB 
    model.addAttribute("form", form); 

    return "/form"; 
} 

@RequestMapping(value="/{supplierId}", method=RequestMethod.POST) 
public String post(HttpServletRequest request, @PathVariable Long supplierId, @Valid @ModelAttribute("form") Form form, BindingResult result, Model model, Principal principal){ 

    System.out.println(form.getID()); //Here the id is 0 

    safeFoodFormService.store(form, supplierId); 
    return "redirect:/supplier"; 
} 

我Freemarker的形式

<form class="form-horizontal" action="<@spring.url "/forms/${supplier.ID?c}"/>" method="post" command="form"> 

如果我不添加此行我的表單裏面

<@spring.bind "form.ID" /> 

<input type="hidden" name="${spring.status.expression}" value="${spring.status.value default("")}" /> 

我將是非常好的,如果這可以由Spring來處理它會工作。謝謝

回答

1

Spring數據綁定採用請求名稱/值對並將具有相同名稱的相應屬性綁定到相應的值。因此,如果請求中沒有id請求參數,spring mvc無法將其值映射到將注入到控制器方法的模型bean中。因此,通過任何機制,表單必須有一個輸入(隱藏或以其他方式)讓Spring將其值綁定到bean屬性。

相關問題