今天在使用SpringMVC接收參數的時候,碰到個同名參數綁定的問題,參考了好幾篇文章才解決問題,因此本身在這裏總結一下。html
好比,個人表單是這樣的:java
<form action="/test.action" method="post"> <input name="user.name"> <input name="acc.name"> <input type="submit"> </form>
若是是sturts的話,這個很好解決,在Controller聲明user和acc對象就好了,可是SpringMVC的參數綁定和struts不同,它會自動的去找對應的屬性綁定,而若是你的action是這樣的:app
@RequestMapping("/test.action") public void test(Account account, User user){ System.out.println(user); System.out.println(account); }
這樣的話是會報錯的,怎麼辦呢?post
這裏要用到@InitBinder這個註解,詳細的解釋能夠找相關資料,這裏只講怎麼用。在Controller類添加下面兩個方法,做用是把指定的開頭標識符的值賦給成指定名字的對象code
@InitBinder("account") public void initAccountBinder(WebDataBinder binder) { binder.setFieldDefaultPrefix("acc."); } @InitBinder("user") public void initUserBinder(WebDataBinder binder) { binder.setFieldDefaultPrefix("user."); }
而後把action方法改形成下面這樣就能夠了。orm
@RequestMapping("/test.action") public void test(@ModelAttribute("account") Account account, @ModelAttribute("user") User user){ System.out.println(user); System.out.println(account); }
注意@ModelAttribute裏面的參數要跟上面定義的@InitBinder裏面的值對應,不然是取不到值的。htm