org.grails.databinding
Interface StructuredBindingEditor<T>

All Superinterfaces:
BindingHelper<T>

public interface StructuredBindingEditor<T>
extends BindingHelper<T>

StructuredBindingEditors convert structured data in a Map into an object. Typically a structured editor will pull several values out of the Map that are necessary to initialize the state of the object.

class Address {
    String state
    String city
}
class StructuredAddressBindingEditor implements StructuredBindingEditor {

    public Object getPropertyValue(Object obj, String propertyName, Map source) {
        def address = new Address()

        address.state = source[propertyName + '_someState']
        address.city = source[propertyName + '_someCity']

        address
    }
}

def binder = new SimpleDataBinder()
binder.registerStructuredEditor Address, new StructuredAddressBindingEditor()
def resident = new Resident()
def bindingSource = [:]
bindingSource.name = 'Scott'
bindingSource.homeAddress_someCity = "Scott's Home City"
bindingSource.homeAddress_someState = "Scott's Home State"
bindingSource.workAddress_someState = "Scott's Work State"
bindingSource.workAddress = 'struct'
bindingSource.homeAddress = 'struct'

binder.bind resident, bindingSource

resident.name == 'Scott'
resident.homeAddress
assert resident.homeAddress.city == "Scott's Home City"
assert resident.homeAddress.state == "Scott's Home State"
assert resident.workAddress
assert resident.workAddress.state == "Scott's Work State"
assert resident.workAddress.city == null

Since:
2.3
See Also:
SimpleDataBinder.registerStructuredEditor(Class, StructuredBindingEditor)

Method Summary
 T getPropertyValue(java.lang.Object obj, java.lang.String propertyName, DataBindingSource source)
          The value returned from this method will be bound to the property specified by propertyName.
 

Method Detail

getPropertyValue

T getPropertyValue(java.lang.Object obj,
                   java.lang.String propertyName,
                   DataBindingSource source)
The value returned from this method will be bound to the property specified by propertyName.

Specified by:
getPropertyValue in interface BindingHelper<T>
Parameters:
obj - The object that data binding is being applied to
propertyName - The name of the property data binding is being applied to
source - The source containing all of the values being bound to this object
Returns:
The value which should be bound to propertyName