我想了解@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/