3

在單個控制器中可以有多個initBinder方法嗎?每個InitBinder()(見代碼)依賴於一個唯一的請求處理程序,例如initBinder()在url上調用:「/ update/account」和initBinderOne()在「update/account/pass」上?如何定義多個initBinder

我寧願有一個控制器的所有更新而不是多個。請指教。

@Controller 
@RequestMapping(value="/uodate/account") 
public class UpdateController { 

@RequestMapping(method=RequestMethod.GET) 
    public String updateAccount(@ModelAttribute("account") Account account...){ 
     .. 
    } 

    @RequestMapping(method=RequestMethod.POST) 
    public String update(@Valid Account account...){ 
     ... 
    } 

@RequestMapping(value="/pass", method=RequestMethod.GET) 
    public String updatePass(@ModelAttribute("account") Account account...){ 
     ... 
    } 

    @RequestMapping(value="/pass",method=RequestMethod.POST) 
    public String updatePass(@Valid Account account...){ 
     ... 
    } 


@InitBinder("account") 
    public void initBinder(WebDataBinder binder){ 
     binder.setValidator(validateAccount); 
     binder.setAllowedFields(new String[]{"accountId","accountname","firstName", 
       "lastName","address"}); 

    } 


@InitBinder("account") 
    public void initBinderOne(WebDataBinder binder){ 
     binder.setValidator(validatePassword); 
     binder.setAllowedFields(new String[]{"accountId","password}); 

    } 

回答

2

Spring不支持將多個驗證程序附加到單個命令。但是,您可以爲不同的命令定義多個@InitBinder方法。例如,你可以把下面的一個控制器和驗證user1和user2參數:

@InitBinder("user1") 
protected void initUser1Binder(WebDataBinder binder) { 
    binder.setValidator(new User1Validator()); 
} 

@InitBinder("user2") 
protected void initUser2Binder(WebDataBinder binder) { 
    binder.setValidator(new User2Validator()); 
} 
+3

...你怎麼能夠讓initUser2Binder()來具體處理程序響應例如「更新/帳號/ PAASS」? –