SpringMVC同名參數綁定問題

今天在使用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

相關文章
相關標籤/搜索