public class DirectFieldAccessor extends AbstractPropertyAccessor
PropertyAccessor
implementation that directly accesses instance fields.
Allows for direct binding to fields instead of going through JavaBean setters.
As of Spring 4.1, this implementation supports nested field traversal.
A DirectFieldAccessor's default for the "extractOldValueForEditor" setting is "true", since a field can always be read without side effects.
AbstractPropertyAccessor.setExtractOldValueForEditor(boolean)
,
BeanWrapper
,
DirectFieldBindingResult
,
DataBinder.initDirectFieldAccess()
NESTED_PROPERTY_SEPARATOR, NESTED_PROPERTY_SEPARATOR_CHAR, PROPERTY_KEY_PREFIX, PROPERTY_KEY_PREFIX_CHAR, PROPERTY_KEY_SUFFIX, PROPERTY_KEY_SUFFIX_CHAR
Constructor and Description |
---|
DirectFieldAccessor(Object rootObject)
Create a new DirectFieldAccessor for the given root object.
|
Modifier and Type | Method and Description |
---|---|
Class<?> |
getPropertyType(String propertyPath)
Determine the property type for the given property path.
|
TypeDescriptor |
getPropertyTypeDescriptor(String propertyName)
Return a type descriptor for the specified property:
preferably from the read method, falling back to the write method.
|
Object |
getPropertyValue(String propertyName)
Actually get the value of a property.
|
Class<?> |
getRootClass()
Return the class of the root object at the top of the path of this instance.
|
Object |
getRootInstance()
Return the root object at the top of the path of this instance.
|
boolean |
isReadableProperty(String propertyName)
Determine whether the specified property is readable.
|
boolean |
isWritableProperty(String propertyName)
Determine whether the specified property is writable.
|
void |
setPropertyValue(String propertyName,
Object newValue)
Actually set a property value.
|
isAutoGrowNestedPaths, isExtractOldValueForEditor, setAutoGrowNestedPaths, setExtractOldValueForEditor, setPropertyValue, setPropertyValues, setPropertyValues, setPropertyValues, setPropertyValues
convertIfNecessary, convertIfNecessary, convertIfNecessary
copyCustomEditorsTo, copyDefaultEditorsTo, findCustomEditor, getConversionService, getDefaultEditor, guessPropertyTypeFromEditors, hasCustomEditorForElement, overrideDefaultEditor, registerCustomEditor, registerCustomEditor, registerDefaultEditors, setConversionService, useConfigValueEditors
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getConversionService, setConversionService
findCustomEditor, registerCustomEditor, registerCustomEditor
convertIfNecessary, convertIfNecessary, convertIfNecessary
public DirectFieldAccessor(Object rootObject)
rootObject
- the root object to accesspublic final Object getRootInstance()
public final Class<?> getRootClass()
public boolean isReadableProperty(String propertyName) throws BeansException
PropertyAccessor
Returns false
if the property doesn't exist.
propertyName
- the property to check
(may be a nested path and/or an indexed/mapped property)BeansException
public boolean isWritableProperty(String propertyName) throws BeansException
PropertyAccessor
Returns false
if the property doesn't exist.
propertyName
- the property to check
(may be a nested path and/or an indexed/mapped property)BeansException
public Class<?> getPropertyType(String propertyPath) throws BeansException
PropertyEditorRegistrySupport
Called by PropertyEditorRegistrySupport.findCustomEditor(java.lang.Class<?>, java.lang.String)
if no required type has been specified,
to be able to find a type-specific editor even if just given a property path.
The default implementation always returns null
.
BeanWrapperImpl overrides this with the standard getPropertyType
method as defined by the BeanWrapper interface.
getPropertyType
in interface PropertyAccessor
getPropertyType
in class AbstractPropertyAccessor
propertyPath
- the property path to determine the type fornull
if not determinableInvalidPropertyException
- if there is no such property or
if the property isn't readablePropertyAccessException
- if the property was valid but the
accessor method failedBeansException
PropertyAccessor.getPropertyType(String)
public TypeDescriptor getPropertyTypeDescriptor(String propertyName) throws BeansException
PropertyAccessor
propertyName
- the property to check
(may be a nested path and/or an indexed/mapped property)null
if not determinableInvalidPropertyException
- if there is no such property or
if the property isn't readableBeansException
public Object getPropertyValue(String propertyName) throws BeansException
AbstractPropertyAccessor
getPropertyValue
in interface PropertyAccessor
getPropertyValue
in class AbstractPropertyAccessor
propertyName
- name of the property to get the value ofInvalidPropertyException
- if there is no such property or
if the property isn't readablePropertyAccessException
- if the property was valid but the
accessor method failedBeansException
public void setPropertyValue(String propertyName, Object newValue) throws BeansException
AbstractPropertyAccessor
setPropertyValue
in interface PropertyAccessor
setPropertyValue
in class AbstractPropertyAccessor
propertyName
- name of the property to set value ofnewValue
- the new valueInvalidPropertyException
- if there is no such property or
if the property isn't writablePropertyAccessException
- if the property was valid but the
accessor method failed or a type mismatch occuredBeansException