简介
• 用于@Controller
中标注的方法上,表示为当前控制器注册一个属性编辑器,只对当前的Controller有效。
• 由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定。
• @InitBinder方法不能有返回值,它必须声明为void。
• @InitBinder方法的参数通常是 WebDataBinder。
DataBinder类常用方法及其描述(WebDataBinder 是 DataBinder 的子类)
修饰符和类型 | 方法和描述 |
---|---|
void |
addCustomFormatter(Formatter<?> formatter) 添加自定义格式化程序,将其应用于与 |
void |
addCustomFormatter(Formatter<?> formatter, java.lang.Class<?>... fieldTypes) 添加自定义格式化程序,仅将其应用于指定的字段类型(如果有),或者应用于与 |
void |
addCustomFormatter(Formatter<?> formatter, java.lang.String... fields) 为类中指定的字段类型添加自定义格式化程序, |
void |
addValidators(Validator... validators) 添加验证器以在每个绑定步骤后应用。 |
protected void |
applyPropertyValues(MutablePropertyValues mpvs) 将给定的属性值应用于目标对象。 |
void |
bind(PropertyValues pvs) 将给定的属性值绑定到此绑定程序的目标。 |
protected void |
checkAllowedFields(MutablePropertyValues mpvs) 根据允许的字段检查给定的属性值,删除不允许的字段的值。 |
protected void |
checkRequiredFields(MutablePropertyValues mpvs) 根据所需字段检查给定的属性值,并在适当的位置生成缺少的字段错误。 |
java.util.Map<?,?> |
close() 关闭此DataBinder,如果遇到任何错误,可能会导致抛出BindException。 |
<T> T |
convertIfNecessary(java.lang.Object value, java.lang.Class<T> requiredType) 将值转换为所需类型(如果需要,从String)。 |
<T> T |
convertIfNecessary(java.lang.Object value, java.lang.Class<T> requiredType, java.lang.reflect.Field field) 将值转换为所需类型(如果需要,从String)。 |
<T> T |
convertIfNecessary(java.lang.Object value, java.lang.Class<T> requiredType, MethodParameter methodParam) 将值转换为所需类型(如果需要,从String)。 |
<T> T |
convertIfNecessary(java.lang.Object value, java.lang.Class<T> requiredType, TypeDescriptor typeDescriptor) 将值转换为所需类型(如果需要,从String)。 |
protected AbstractPropertyBindingResult |
createBeanPropertyBindingResult()
|
protected AbstractPropertyBindingResult |
createDirectFieldBindingResult()
|
protected void |
doBind(MutablePropertyValues mpvs) 绑定过程的实际实现,使用传入的MutablePropertyValues实例。 |
java.beans.PropertyEditor |
findCustomEditor(java.lang.Class<?> requiredType, java.lang.String propertyPath) 查找给定类型和属性的自定义属性编辑器。 |
java.lang.String[] |
getAllowedFields() 返回应该允许绑定的字段。 |
int |
getAutoGrowCollectionLimit() 返回阵列和集合自动增长的当前限制。 |
BindingErrorProcessor |
getBindingErrorProcessor() 返回处理绑定错误的策略。 |
BindingResult |
getBindingResult() 返回此DataBinder创建的BindingResult实例。 |
ConversionService |
getConversionService() 返回关联的ConversionService(如果有)。 |
java.lang.String[] |
getDisallowedFields() 返回应该字段不能被允许的结合。 |
protected AbstractPropertyBindingResult |
getInternalBindingResult() 返回此DataBinder持有的内部BindingResult,作为AbstractPropertyBindingResult。 |
java.lang.String |
getObjectName() 返回绑定对象的名称。 |
protected ConfigurablePropertyAccessor |
getPropertyAccessor() 返回此绑定器的BindingResult的基础PropertyAccessor。 |
protected PropertyEditorRegistry |
getPropertyEditorRegistry() 返回此绑定器的BindingResult的基础TypeConverter。 |
java.lang.String[] |
getRequiredFields() 返回每个绑定过程所需的字段。 |
protected SimpleTypeConverter |
getSimpleTypeConverter() 返回此binder的底层SimpleTypeConverter。 |
java.lang.Object |
getTarget() 返回包装的目标对象。 |
protected TypeConverter |
getTypeConverter() 返回此绑定器的BindingResult的基础TypeConverter。 |
Validator |
getValidator() 返回主要验证程序以在每个绑定步骤后应用(如果有)。 |
java.util.List<Validator> |
getValidators() 返回验证器以在数据绑定后应用。 |
void |
initBeanPropertyAccess() 初始化此DataBinder的标准JavaBean属性访问权限。 |
void |
initDirectFieldAccess() 初始化此DataBinder的直接字段访问,作为默认bean属性访问的替代方法。 |
protected boolean |
isAllowed(java.lang.String field) 如果允许给定字段进行绑定,则返回。 |
boolean |
isAutoGrowNestedPaths() 返回是否已激活嵌套路径的“自动增长”。 |
boolean |
isIgnoreInvalidFields() 返回绑定时是否忽略无效字段。 |
boolean |
isIgnoreUnknownFields() 返回绑定时是否忽略未知字段。 |
void |
registerCustomEditor(java.lang.Class<?> requiredType, java.beans.PropertyEditor propertyEditor) 为给定类型的所有属性注册给定的自定义属性编辑器。 |
void |
registerCustomEditor(java.lang.Class<?> requiredType, java.lang.String field, java.beans.PropertyEditor propertyEditor) 为给定的类型和属性或给定类型的所有属性注册给定的自定义属性编辑器。 |
void |
replaceValidators(Validator... validators) 在每个绑定步骤后替换要应用的验证器。 |
void |
setAllowedFields(java.lang.String... allowedFields) 注册应该允许绑定的字段。 |
void |
setAutoGrowCollectionLimit(int autoGrowCollectionLimit) 指定阵列和集合自动增长的限制。 |
void |
setAutoGrowNestedPaths(boolean autoGrowNestedPaths) 设置此绑定程序是否应尝试“自动增长”包含空值的嵌套路径。 |
void |
setBindingErrorProcessor(BindingErrorProcessor bindingErrorProcessor) 设置用于处理绑定错误的策略,即必需的字段错误和 |
void |
setConversionService(ConversionService conversionService) 指定用于转换属性值的Spring 3.0 ConversionService,作为JavaBeans PropertyEditors的替代方法。 |
void |
setDisallowedFields(java.lang.String... disallowedFields) 注册应该字段不能被允许的结合。 |
void |
setIgnoreInvalidFields(boolean ignoreInvalidFields) 设置是否忽略无效字段,即是否忽略目标对象中具有不可访问的相应字段的绑定参数(例如,由于嵌套路径中的空值)。 |
void |
setIgnoreUnknownFields(boolean ignoreUnknownFields) 设置是否忽略未知字段,即是否忽略目标对象中没有相应字段的绑定参数。 |
void |
setMessageCodesResolver(MessageCodesResolver messageCodesResolver) 设置用于将错误解析为消息代码的策略。 |
void |
setRequiredFields(java.lang.String... requiredFields) 注册每个绑定过程所需的字段。 |
void |
setValidator(Validator validator) 设置Validator以在每个绑定步骤后应用。 |
void |
validate() 调用指定的Validators(如果有)。 |
void |
validate(java.lang.Object... validationHints) 使用给定的验证提示调用指定的Validators(如果有)。 |
例如
(不获取指定标签的值,即不获取username的值)
UserInfo.class(JavaBean)
package com.user;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class UserInfo {
private String username;
private String userpass;
private String useremail;
private String userage;
private Address address;
public UserInfo() {
super();
}
public UserInfo(String username, String userpass, String useremail, String userage, Address address) {
this.username = username;
this.userpass = userpass;
this.useremail = useremail;
this.userage = userage;
this.address = address;
}
@Override
public String toString() {
return "UserInfo{" +
"username='" + username + '\'' +
", userpass='" + userpass + '\'' +
", useremail='" + useremail + '\'' +
", userage=" + userage +
", address=" + address +
'}';
}
}
index.jsp
<%--
Created by IntelliJ IDEA.
User: 23369
Date: 3/31/2019
Time: 3:03 PM
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="testInitBinder" method="post">
<input type="text" name="username"><br>
<input type="text" name="userpass"><br>
<input type="text" name="useremail"><br>
<input type="text" name="userage"><br>
<input type="text" name="address.procity"><br>
<input type="text" name="address.city"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
TestInitBinder.class
package com.hello2;
import com.user.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestInitBinder {
@RequestMapping("testInitBinder")
public String testInitBinder(UserInfo userInfo){
System.out.println(userInfo);
return "success";
}
@InitBinder
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.setDisallowedFields("username");
}
}