3

単一のコントローラー内に複数の initBinder メソッドを持つことは可能でしょうか? 各 InitBinder() (コードを参照) が一意のリクエスト ハンドラーに依存する場所、たとえば initBinder() は URL: "/update/account" で呼び出され、initBinderOne() は "update/account/pass" で呼び出されますか?

複数のコントローラーではなく、すべての更新に対して単一のコントローラーを使用することをお勧めします。お知らせ下さい。

@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});

    }   
4

1 に答える 1

2

Spring は、単一のコマンドに複数のバリデーターをアタッチすることをサポートしていません。ただし、異なるコマンドに対して複数の @InitBinder メソッドを定義できます。たとえば、以下を 1 つのコントローラーに配置して、user1 および user2 パラメーターを検証できます。

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

@InitBinder("user2")
protected void initUser2Binder(WebDataBinder binder) {
    binder.setValidator(new User2Validator());
}
于 2013-07-30T14:01:58.383 に答える