我想了解@InitBinder。
我试图将多个InitBinder用于多个验证器

@InitBinder("Validator1")
protected void initBinder1(WebDataBinder binder) {
    binder.setValidator(userFormValidator);
}

@InitBinder("Validator2")
protected void initBinder2(WebDataBinder binder) {
    binder.setValidator(costcenterFormValidator);
}


它对我不起作用,因为该模型同时嵌套在包装类中,我将进行相同的验证

那么@InitBinder什么时候是个好主意呢?

最佳答案

根据javadoc,@ InitBinder中的值是应该使用此init-binder方法的命令/表单属性和/或请求参数的名称。默认值是应用于由注释的处理程序类处理的所有命令/表单属性和所有请求参数。在此指定模型属性名称或请求参数名称会将init-binder方法限制为那些特定的属性/参数,而通常将不同的init-binder方法应用于不同的属性或参数组。

在您的情况下,您需要将@InitBinder批注的值设置为您要验证而不是验证器名称的模型属性的名称。对于userFormValidator,如果您的模型属性名称是user,则initbinder应为:

@InitBinder("user")
protected void initBinder1(WebDataBinder binder) {
    binder.setValidator(userFormValidator);
}


而且,如果costcenterFormValidator用于验证名为costcenter的模型属性,则initbinder应为:

@InitBinder("costcenter")
protected void initBinder2(WebDataBinder binder) {
    binder.setValidator(costcenterFormValidator);
}

关于java - @InitBinder的value元素的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42534227/

10-11 18:17