Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @InitBinder'的目的是什么;什么是价值要素?_Java_Spring_Annotations - Fatal编程技术网

Java @InitBinder'的目的是什么;什么是价值要素?

Java @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。 我尝试对多个验证器使用多个InitBinder

@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的值,则它适用于整个控制器。这里出了什么问题?