Java @InitBinder'的目的是什么;什么是价值要素?
我想了解@InitBinder。 我尝试对多个验证器使用多个InitBinderJava @InitBinder'的目的是什么;什么是价值要素?,java,spring,annotations,Java,Spring,Annotations,我想了解@InitBinder。 我尝试对多个验证器使用多个InitBinder @InitBinder("Validator1") protected void initBinder1(WebDataBinder binder) { binder.setValidator(userFormValidator); } @InitBinder("Validator2") protected void initBinder2(WebDataBinder binder) { bind
@InitBinder("Validator1")
protected void initBinder1(WebDataBinder binder) {
binder.setValidator(userFormValidator);
}
@InitBinder("Validator2")
protected void initBinder2(WebDataBinder binder) {
binder.setValidator(costcenterFormValidator);
}
它对我不起作用,因为模型同时嵌套在包装器类中,我将对验证执行同样的操作
那么,什么时候使用带有值的@InitBinder是个好主意?根据,@InitBinder中的值是该init binder方法应该应用的命令/表单属性和/或请求参数的名称。默认设置是应用于所有命令/表单属性以及由带注释的处理程序类处理的所有请求参数。在此处指定模型属性名称或请求参数名称将init binder方法限制为那些特定的属性/参数,不同的init binder方法通常应用于不同的属性或参数组
在您的例子中,您需要将@InitBinder注释的值设置为希望它验证的模型属性的名称,而不是验证程序的某个名称。对于userFormValidator,如果您的模型属性名称为user,则initbinder应为:
@InitBinder("user")
protected void initBinder1(WebDataBinder binder) {
binder.setValidator(userFormValidator);
}
@InitBinder("costcenter")
protected void initBinder2(WebDataBinder binder) {
binder.setValidator(costcenterFormValidator);
}
如果costcenterFormValidator用于验证名为costcenter的模型属性,则initbinder应为:
@InitBinder("user")
protected void initBinder1(WebDataBinder binder) {
binder.setValidator(userFormValidator);
}
@InitBinder("costcenter")
protected void initBinder2(WebDataBinder binder) {
binder.setValidator(costcenterFormValidator);
}
我是否可以将init binder应用于仅与该控制器相关的特定方法和模型对象?我该怎么做?下面是我的代码@InitBinder(“saveCustomerProfile”)public void InitBinder(WebDataBinder binder){binder.setDisallowedFields(新字符串[]{“cbr1”,“customerFirstName”});}此代码未设置BindingResult.getSuppressedFields(),并且不适用于“saveCustomerProfile”方法。如果我删除init binder的值,则它适用于整个控制器。这里出了什么问题?