public class AddressFields {
@Bind(pmoProperty = "street", modelAttribute = Address.PROPERTY_STREET)
private final TextField streetTxt;
/* uses the field's name as pmoProperty and modelAttribute */
@Bind
private final TextField city;
/* name of pmoProperty is different from the field name */
@Bind(pmoProperty = "country",
availableValues = AvailableValuesType.DYNAMIC,
modelAttribute = Address.PROPERTY_COUNTRY)
private final ComboBox<Country> countryCb;
}
Creation of a UI with linkki
Manual Binding With @Bind
Due to special requirements or custom Fields it is sometimes not possible to automatically create a layout with an annotated PMO. For this case linkki offers the option of 'only' using the data binding. This way, control over creation, arrangement and configuration (e.g. setNullRepresentation() or setConverter()) of the component is kept.
To activate the manual binding the component must be marked with the @Bind annotation. Both fields and methods can be annotated. Components based on the following classes and interfaces can be used with @Bind:
-
com.vaadin.flow.component.Component -
com.vaadin.flow.component.AbstractField<C, T> -
com.vaadin.flow.component.html.Label -
com.vaadin.flow.component.html.H2 -
com.vaadin.flow.component.button.Button -
com.vaadin.flow.component.HasValue<E, V> -
com.vaadin.flow.data.provider.HasListDataView<T, V>
Then, the data binding can be created via the Binder.
@Bind(pmoProperty = "street")
public TextField getStreetTxt() {
return streetTxt;
}
/* uses the pmoProperty and modelAttribute "city" derived from the method name */
@Bind
public TextField getCity() {
return cityTxt;
}
@Bind(pmoProperty = "country", availableValues = AvailableValuesType.DYNAMIC)
public ComboBox<Country> getCountryCb() {
return countryCb;
}
When the data binding of a Vaadin component of a third party library should be used by linkki, it can be activated via inheritance of 'delegate proxies' and @Bind on the methods.
|
new Binder(addressFields, addressPmo).setupBindings(bindingContext);
|
Binding summary:
linkki uses certain naming conventions. That way sources of errors and refactoring complexity are reduced. The values used in the annotations for |