类 WebDataBinder
- java.lang.Object
- org.springframework.validation.DataBinder
- org.springframework.web.bind.WebDataBinder
- 所有已实现的接口:
PropertyEditorRegistry
,TypeConverter
public class WebDataBinder extends DataBinder
SpecialDataBinder
for data binding from web request parameters to JavaBean objects. Designed for web environments, but not dependent on the Servlet API; serves as base class for more specific DataBinder variants, such asServletRequestDataBinder
.Includes support for field markers which address a common problem with HTML checkboxes and select options: detecting that a field was part of the form, but did not generate a request parameter because it was empty. A field marker allows to detect that state and reset the corresponding bean property accordingly. Default values, for parameters that are otherwise not present, can specify a value for the field other then empty.
- 从以下版本开始:
- 1.2
- 作者:
- Juergen Hoeller, Scott Andrews, Brian Clozel
- 另请参阅:
DataBinder.registerCustomEditor(java.lang.Class<?>, java.beans.PropertyEditor)
,DataBinder.setAllowedFields(java.lang.String...)
,DataBinder.setRequiredFields(java.lang.String...)
,setFieldMarkerPrefix(java.lang.String)
,setFieldDefaultPrefix(java.lang.String)
,ServletRequestDataBinder
字段概要
字段 修饰符和类型 字段 说明 static String
DEFAULT_FIELD_DEFAULT_PREFIX
Default prefix that field default parameters start with, followed by the field name: e.g. "!static String
DEFAULT_FIELD_MARKER_PREFIX
Default prefix that field marker parameters start with, followed by the field name: e.g.从类继承的字段 org.springframework.validation.DataBinder
DEFAULT_AUTO_GROW_COLLECTION_LIMIT, DEFAULT_OBJECT_NAME, logger
构造器概要
构造器 构造器 说明 WebDataBinder(Object target)
Create a new WebDataBinder instance, with default object name.WebDataBinder(Object target, String objectName)
Create a new WebDataBinder instance.
方法概要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 protected void
bindMultipart(Map<String,List<MultipartFile>> multipartFiles, MutablePropertyValues mpvs)
Bind all multipart files contained in the given request, if any (in case of a multipart request).protected void
checkFieldDefaults(MutablePropertyValues mpvs)
Check the given property values for field defaults, i.e. for fields that start with the field default prefix.protected void
checkFieldMarkers(MutablePropertyValues mpvs)
Check the given property values for field markers, i.e. for fields that start with the field marker prefix.protected void
doBind(MutablePropertyValues mpvs)
This implementation performs a field default and marker check before delegating to the superclass binding process.Object
getEmptyValue(Class<?> fieldType)
Determine an empty value for the specified field.protected Object
getEmptyValue(String field, Class<?> fieldType)
Determine an empty value for the specified field.String
getFieldDefaultPrefix()
Return the prefix for parameters that mark default fields.String
getFieldMarkerPrefix()
Return the prefix for parameters that mark potentially empty fields.boolean
isBindEmptyMultipartFiles()
Return whether to bind empty MultipartFile parameters.void
setBindEmptyMultipartFiles(boolean bindEmptyMultipartFiles)
Set whether to bind empty MultipartFile parameters.void
setFieldDefaultPrefix(String fieldDefaultPrefix)
Specify a prefix that can be used for parameters that indicate default value fields, having "prefix + field" as name.void
setFieldMarkerPrefix(String fieldMarkerPrefix)
Specify a prefix that can be used for parameters that mark potentially empty fields, having "prefix + field" as name.从类继承的方法 org.springframework.validation.DataBinder
addCustomFormatter, addCustomFormatter, addCustomFormatter, addValidators, applyPropertyValues, bind, checkAllowedFields, checkRequiredFields, close, convertIfNecessary, convertIfNecessary, convertIfNecessary, convertIfNecessary, createBeanPropertyBindingResult, createDirectFieldBindingResult, findCustomEditor, getAllowedFields, getAutoGrowCollectionLimit, getBindingErrorProcessor, getBindingResult, getConversionService, getDisallowedFields, getInternalBindingResult, getObjectName, getPropertyAccessor, getPropertyEditorRegistry, getRequiredFields, getSimpleTypeConverter, getTarget, getTypeConverter, getValidator, getValidators, initBeanPropertyAccess, initDirectFieldAccess, isAllowed, isAutoGrowNestedPaths, isIgnoreInvalidFields, isIgnoreUnknownFields, registerCustomEditor, registerCustomEditor, replaceValidators, setAllowedFields, setAutoGrowCollectionLimit, setAutoGrowNestedPaths, setBindingErrorProcessor, setConversionService, setDisallowedFields, setIgnoreInvalidFields, setIgnoreUnknownFields, setMessageCodesResolver, setRequiredFields, setValidator, validate, validate
字段详细资料
DEFAULT_FIELD_MARKER_PREFIX
public static final String DEFAULT_FIELD_MARKER_PREFIX
Default prefix that field marker parameters start with, followed by the field name: e.g. "_subscribeToNewsletter" for a field "subscribeToNewsletter".Such a marker parameter indicates that the field was visible, that is, existed in the form that caused the submission. If no corresponding field value parameter was found, the field will be reset. The value of the field marker parameter does not matter in this case; an arbitrary value can be used. This is particularly useful for HTML checkboxes and select options.
DEFAULT_FIELD_DEFAULT_PREFIX
public static final String DEFAULT_FIELD_DEFAULT_PREFIX
Default prefix that field default parameters start with, followed by the field name: e.g. "!subscribeToNewsletter" for a field "subscribeToNewsletter".Default parameters differ from field markers in that they provide a default value instead of an empty value.
构造器详细资料
WebDataBinder
public WebDataBinder(@Nullable Object target)
Create a new WebDataBinder instance, with default object name.- 参数:
target
- the target object to bind onto (ornull
if the binder is just used to convert a plain parameter value)- 另请参阅:
DataBinder.DEFAULT_OBJECT_NAME
WebDataBinder
public WebDataBinder(@Nullable Object target, String objectName)
Create a new WebDataBinder instance.- 参数:
target
- the target object to bind onto (ornull
if the binder is just used to convert a plain parameter value)objectName
- the name of the target object
方法详细资料
setFieldMarkerPrefix
public void setFieldMarkerPrefix(@Nullable String fieldMarkerPrefix)
Specify a prefix that can be used for parameters that mark potentially empty fields, having "prefix + field" as name. Such a marker parameter is checked by existence: You can send any value for it, for example "visible". This is particularly useful for HTML checkboxes and select options.Default is "_", for "_FIELD" parameters (e.g. "_subscribeToNewsletter"). Set this to null if you want to turn off the empty field check completely.
HTML checkboxes only send a value when they're checked, so it is not possible to detect that a formerly checked box has just been unchecked, at least not with standard HTML means.
One way to address this is to look for a checkbox parameter value if you know that the checkbox has been visible in the form, resetting the checkbox if no value found. In Spring web MVC, this typically happens in a custom
onBind
implementation.This auto-reset mechanism addresses this deficiency, provided that a marker parameter is sent for each checkbox field, like "_subscribeToNewsletter" for a "subscribeToNewsletter" field. As the marker parameter is sent in any case, the data binder can detect an empty field and automatically reset its value.
getFieldMarkerPrefix
@Nullable public String getFieldMarkerPrefix()
Return the prefix for parameters that mark potentially empty fields.
setFieldDefaultPrefix
public void setFieldDefaultPrefix(@Nullable String fieldDefaultPrefix)
Specify a prefix that can be used for parameters that indicate default value fields, having "prefix + field" as name. The value of the default field is used when the field is not provided.Default is "!", for "!FIELD" parameters (e.g. "!subscribeToNewsletter"). Set this to null if you want to turn off the field defaults completely.
HTML checkboxes only send a value when they're checked, so it is not possible to detect that a formerly checked box has just been unchecked, at least not with standard HTML means. A default field is especially useful when a checkbox represents a non-boolean value.
The presence of a default parameter preempts the behavior of a field marker for the given field.
getFieldDefaultPrefix
@Nullable public String getFieldDefaultPrefix()
Return the prefix for parameters that mark default fields.
setBindEmptyMultipartFiles
public void setBindEmptyMultipartFiles(boolean bindEmptyMultipartFiles)
Set whether to bind empty MultipartFile parameters. Default is "true".Turn this off if you want to keep an already bound MultipartFile when the user resubmits the form without choosing a different file. Else, the already bound MultipartFile will be replaced by an empty MultipartFile holder.
- 另请参阅:
MultipartFile
isBindEmptyMultipartFiles
public boolean isBindEmptyMultipartFiles()
Return whether to bind empty MultipartFile parameters.
doBind
protected void doBind(MutablePropertyValues mpvs)
This implementation performs a field default and marker check before delegating to the superclass binding process.- 覆盖:
doBind
在类中DataBinder
- 参数:
mpvs
- the property values to bind, as MutablePropertyValues instance- 另请参阅:
checkFieldDefaults(org.springframework.beans.MutablePropertyValues)
,checkFieldMarkers(org.springframework.beans.MutablePropertyValues)
checkFieldDefaults
protected void checkFieldDefaults(MutablePropertyValues mpvs)
Check the given property values for field defaults, i.e. for fields that start with the field default prefix.The existence of a field defaults indicates that the specified value should be used if the field is otherwise not present.
- 参数:
mpvs
- the property values to be bound (can be modified)- 另请参阅:
getFieldDefaultPrefix()
checkFieldMarkers
protected void checkFieldMarkers(MutablePropertyValues mpvs)
Check the given property values for field markers, i.e. for fields that start with the field marker prefix.The existence of a field marker indicates that the specified field existed in the form. If the property values do not contain a corresponding field value, the field will be considered as empty and will be reset appropriately.
- 参数:
mpvs
- the property values to be bound (can be modified)- 另请参阅:
getFieldMarkerPrefix()
,getEmptyValue(String, Class)
getEmptyValue
@Nullable protected Object getEmptyValue(String field, @Nullable Class<?> fieldType)
Determine an empty value for the specified field.The default implementation delegates to
getEmptyValue(Class)
if the field type is known, otherwise falls back tonull
.- 参数:
field
- the name of the fieldfieldType
- the type of the field- 返回:
- the empty value (for most fields:
null
)
getEmptyValue
@Nullable public Object getEmptyValue(Class<?> fieldType)
Determine an empty value for the specified field.The default implementation returns:
Boolean.FALSE
for boolean fields- an empty array for array types
- Collection implementations for Collection types
- Map implementations for Map types
- else,
null
is used as default
- 参数:
fieldType
- the type of the field- 返回:
- the empty value (for most fields:
null
) - 从以下版本开始:
- 5.0
bindMultipart
protected void bindMultipart(Map<String,List<MultipartFile>> multipartFiles, MutablePropertyValues mpvs)
Bind all multipart files contained in the given request, if any (in case of a multipart request). To be called by subclasses.Multipart files will only be added to the property values if they are not empty or if we're configured to bind empty multipart files too.
- 参数:
multipartFiles
- a Map of field name String to MultipartFile objectmpvs
- the property values to be bound (can be modified)- 另请参阅:
MultipartFile
,setBindEmptyMultipartFiles(boolean)