Class Binder.BindingBuilderImpl<BEAN,FIELDVALUE,TARGET>
- java.lang.Object
-
- com.vaadin.flow.data.binder.Binder.BindingBuilderImpl<BEAN,FIELDVALUE,TARGET>
-
- Type Parameters:
BEAN- the bean type, must match the Binder bean typeFIELDVALUE- the value type of the fieldTARGET- the target data type of the binding, matches the field type until a converter has been set
- All Implemented Interfaces:
Binder.BindingBuilder<BEAN,TARGET>,Serializable
protected static class Binder.BindingBuilderImpl<BEAN,FIELDVALUE,TARGET> extends Object implements Binder.BindingBuilder<BEAN,TARGET>
An internal implementation ofBindingBuilder.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedBindingBuilderImpl(Binder<BEAN> binder, HasValue<?,FIELDVALUE> field, Converter<FIELDVALUE,TARGET> converterValidatorChain, BindingValidationStatusHandler statusHandler)Creates a new binding builder associated with the given field.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Binder.BindingBuilder<BEAN,TARGET>asRequired(ErrorMessageProvider errorMessageProvider)Sets the field to be required.Binder.BindingBuilder<BEAN,TARGET>asRequired(Validator<TARGET> customRequiredValidator)Sets the field to be required and delegates the required check to a custom validator.Binder.Binding<BEAN,TARGET>bind(ValueProvider<BEAN,TARGET> getter, Setter<BEAN,TARGET> setter)Completes this binding using the given getter and setter functions representing a backing bean property.Binder.Binding<BEAN,TARGET>bind(String propertyName)Completes this binding by connecting the field to the property with the given name.Binder.Binding<BEAN,TARGET>bindReadOnly(ValueProvider<BEAN,TARGET> getter)Completes this binding using the given getter function representing a backing bean property.Binder.Binding<BEAN,TARGET>bindReadOnly(String propertyName)Completes this binding by connecting the field to the property with the given name.protected voidcheckUnbound()Throws if this binding is already completed and cannot be modified anymore.protected Binder<BEAN>getBinder()Returns theBinderconnected to thisBindinginstance.HasValue<?,FIELDVALUE>getField()Gets the field the binding is being built for.<NEWTARGET>
Binder.BindingBuilder<BEAN,NEWTARGET>withConverter(Converter<TARGET,NEWTARGET> converter)Maps the binding to another data type using the givenConverter.protected <NEWTARGET>
Binder.BindingBuilder<BEAN,NEWTARGET>withConverter(Converter<TARGET,NEWTARGET> converter, boolean resetNullRepresentation)ImplementswithConverter(Converter)method with additional possibility to disable (reset) default null representation converter.Binder.BindingBuilder<BEAN,TARGET>withValidationStatusHandler(BindingValidationStatusHandler handler)Sets aBindingValidationStatusHandlerto track validation status changes.Binder.BindingBuilder<BEAN,TARGET>withValidator(Validator<? super TARGET> validator)Adds a validator to this binding.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.vaadin.flow.data.binder.Binder.BindingBuilder
asRequired, asRequired, withConverter, withConverter, withNullRepresentation, withStatusLabel, withValidator, withValidator, withValidator, withValidator
-
-
-
-
Constructor Detail
-
BindingBuilderImpl
protected BindingBuilderImpl(Binder<BEAN> binder, HasValue<?,FIELDVALUE> field, Converter<FIELDVALUE,TARGET> converterValidatorChain, BindingValidationStatusHandler statusHandler)
Creates a new binding builder associated with the given field. Initializes the builder with the given converter chain and status change handler.- Parameters:
binder- the binder this instance is connected to, not nullfield- the field to bind, not nullconverterValidatorChain- the converter/validator chain to use, not nullstatusHandler- the handler to track validation status, not null
-
-
Method Detail
-
bind
public Binder.Binding<BEAN,TARGET> bind(ValueProvider<BEAN,TARGET> getter, Setter<BEAN,TARGET> setter)
Description copied from interface:Binder.BindingBuilderCompletes this binding using the given getter and setter functions representing a backing bean property. The functions are used to update the field value from the property and to store the field value to the property, respectively.When a bean is bound with
Binder.setBean(Object), the field value is set to the return value of the given getter. The property value is then updated via the given setter whenever the field value changes. The setter may be null; in that case the property value is never updated and the binding is said to be read-only.If the Binder is already bound to some bean, the newly bound field is associated with the corresponding bean property as described above.
If the bound field implements
HasValidator, then the binding instance returned by this method will subscribe for field'sValidationStatusChangeEvents and willvalidateitself upon receiving them.The getter and setter can be arbitrary functions, for instance implementing user-defined conversion or validation. However, in the most basic use case you can simply pass a pair of method references to this method as follows:
class Person { public String getName() { ... } public void setName(String name) { ... } } TextField nameField = new TextField(); binder.forField(nameField).bind(Person::getName, Person::setName);Note: when a
nullsetter is given the field will be marked as readonly by invokingHasValue.setReadOnly(boolean).- Specified by:
bindin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
getter- the function to get the value of the property to the field, not nullsetter- the function to write the field value to the property or null if read-only- Returns:
- the newly created binding
-
bindReadOnly
public Binder.Binding<BEAN,TARGET> bindReadOnly(ValueProvider<BEAN,TARGET> getter)
Description copied from interface:Binder.BindingBuilderCompletes this binding using the given getter function representing a backing bean property. The function is used to update the field value from the property. The field value is not written back to the bean so the binding is read-only.When a bean is bound with
Binder.setBean(Object), the field value is set to the return value of the given getter.If the Binder is already bound to some bean, the newly bound field is associated with the corresponding bean property as described above.
The getter can be arbitrary functions, for instance implementing user-defined conversion or validation. However, in the most basic use case you can simply a method references to this method as follows:
class Person { public String getName() { ... } } TextField nameField = new TextField(); binder.forField(nameField).bindReadOnly(Person::getName);Note: the field will be marked as readonly by invokingHasValue.setReadOnly(boolean).This is a shorthand for
Binder.BindingBuilder.bind(ValueProvider, Setter)method called withnullsetter.- Specified by:
bindReadOnlyin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
getter- the function to get the value of the property to the field, not null- Returns:
- the newly created binding
- See Also:
Binder.BindingBuilder.bind(ValueProvider, Setter)
-
bind
public Binder.Binding<BEAN,TARGET> bind(String propertyName)
Description copied from interface:Binder.BindingBuilderCompletes this binding by connecting the field to the property with the given name. The getter and setter of the property are looked up using aPropertySet.For a
Bindercreated using theBinder(Class)constructor, introspection will be used to find a Java Bean property. If a JSR-303 bean validation implementation is present on the classpath, aBeanValidatoris also added to the binding.The property must have an accessible getter method. It need not have an accessible setter; in that case the property value is never updated and the binding is said to be read-only.
Note: when the binding is read-only the field will be marked as readonly by invoking
HasValue.setReadOnly(boolean).- Specified by:
bindin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
propertyName- the name of the property to bind, not null- Returns:
- the newly created binding
- See Also:
Binder.BindingBuilder.bind(ValueProvider, Setter)
-
bindReadOnly
public Binder.Binding<BEAN,TARGET> bindReadOnly(String propertyName)
Description copied from interface:Binder.BindingBuilderCompletes this binding by connecting the field to the property with the given name. The getter of the property is looked up using aPropertySet. The field value is not written back to the bean so the binding is read-only.For a
Bindercreated using theBinder(Class)constructor, introspection will be used to find a Java Bean property. If a JSR-303 bean validation implementation is present on the classpath, aBeanValidatoris also added to the binding.The property must have an accessible getter method.
Note: the field will be marked as readonly by invoking
HasValue.setReadOnly(boolean).- Specified by:
bindReadOnlyin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
propertyName- the name of the property to bind, not null- Returns:
- the newly created binding
- See Also:
Binder.BindingBuilder.bind(String),Binder.BindingBuilder.bind(ValueProvider, Setter)
-
withValidator
public Binder.BindingBuilder<BEAN,TARGET> withValidator(Validator<? super TARGET> validator)
Description copied from interface:Binder.BindingBuilderAdds a validator to this binding. Validators are applied, in registration order, when the field value is written to the backing property. If any validator returns a failure, the property value is not updated.- Specified by:
withValidatorin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
validator- the validator to add, not null- Returns:
- this binding, for chaining
- See Also:
Binder.BindingBuilder.withValidator(SerializablePredicate, String),Binder.BindingBuilder.withValidator(SerializablePredicate, ErrorMessageProvider)
-
withConverter
public <NEWTARGET> Binder.BindingBuilder<BEAN,NEWTARGET> withConverter(Converter<TARGET,NEWTARGET> converter)
Description copied from interface:Binder.BindingBuilderMaps the binding to another data type using the givenConverter.A converter is capable of converting between a presentation type, which must match the current target data type of the binding, and a model type, which can be any data type and becomes the new target type of the binding. When invoking
Binder.BindingBuilder.bind(ValueProvider, Setter), the target type of the binding must match the getter/setter types.For instance, a
TextFieldcan be bound to an integer-typed property using an appropriate converter such as aStringToIntegerConverter.The converted value is applied back to the field by default, this can be controlled with the method
Binder.Binding.setConvertBackToPresentation(boolean).- Specified by:
withConverterin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Type Parameters:
NEWTARGET- the type to convert to- Parameters:
converter- the converter to use, not null- Returns:
- a new binding with the appropriate type
- See Also:
Binder.Binding.setConvertBackToPresentation(boolean)
-
withValidationStatusHandler
public Binder.BindingBuilder<BEAN,TARGET> withValidationStatusHandler(BindingValidationStatusHandler handler)
Description copied from interface:Binder.BindingBuilderSets aBindingValidationStatusHandlerto track validation status changes.The validation state of each field is updated whenever the user modifies the value of that field.
This method allows to customize the way a binder displays error messages.
The method may be called only once. It means there is no chain unlike
Binder.BindingBuilder.withValidator(Validator)orBinder.BindingBuilder.withConverter(Converter). Also it means that the shorthand methodBinder.BindingBuilder.withStatusLabel(HasText)also may not be called after this method.- Specified by:
withValidationStatusHandlerin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
handler- status change handler- Returns:
- this binding, for chaining
- See Also:
Binder.BindingBuilder.withStatusLabel(HasText)
-
asRequired
public Binder.BindingBuilder<BEAN,TARGET> asRequired(ErrorMessageProvider errorMessageProvider)
Description copied from interface:Binder.BindingBuilderSets the field to be required. This means two things:- the required indicator is visible
- the field value is validated for not being empty*
HasValue.getEmptyValue()returns.- Specified by:
asRequiredin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
errorMessageProvider- the provider for localized validation error message- Returns:
- this binding, for chaining
- See Also:
HasValue.setRequiredIndicatorVisible(boolean),HasValue.isEmpty()
-
asRequired
public Binder.BindingBuilder<BEAN,TARGET> asRequired(Validator<TARGET> customRequiredValidator)
Description copied from interface:Binder.BindingBuilderSets the field to be required and delegates the required check to a custom validator. This means two things:- the required indicator will be displayed for this field
- the field value is validated by customRequiredValidator
- Specified by:
asRequiredin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Parameters:
customRequiredValidator- validator responsible for the required check- Returns:
- this binding, for chaining
- See Also:
HasValue.setRequiredIndicatorVisible(boolean)
-
withConverter
protected <NEWTARGET> Binder.BindingBuilder<BEAN,NEWTARGET> withConverter(Converter<TARGET,NEWTARGET> converter, boolean resetNullRepresentation)
ImplementswithConverter(Converter)method with additional possibility to disable (reset) default null representation converter.The method
withConverter(Converter)calls this method withtrueprovided as the second argument value.- Type Parameters:
NEWTARGET- the type to convert to- Parameters:
converter- the converter to use, not nullresetNullRepresentation- iftruethen default null representation will be deactivated (if not yet), otherwise it won't be removed- Returns:
- a new binding with the appropriate type
- Throws:
IllegalStateException- ifbindhas already been called- See Also:
withConverter(Converter)
-
getBinder
protected Binder<BEAN> getBinder()
Returns theBinderconnected to thisBindinginstance.- Returns:
- the binder
-
checkUnbound
protected void checkUnbound()
Throws if this binding is already completed and cannot be modified anymore.- Throws:
IllegalStateException- if this binding is already bound
-
getField
public HasValue<?,FIELDVALUE> getField()
Description copied from interface:Binder.BindingBuilderGets the field the binding is being built for.- Specified by:
getFieldin interfaceBinder.BindingBuilder<BEAN,FIELDVALUE>- Returns:
- the field this binding is being built for
-
-