easybinder - Vaadin Add-on Directory
Easy bean binding for Vaadin 8 with JSR-303 supportEasyBinder is an alternative field binder for Vaadin 8 that tries to reduce boiler plate code by automating the binding process and relying on javax.validation (JSR 303) for validation.
New features compared with Vaadin 8 standard binder:
- Converter registration support (https://github.com/vaadin/framework/issues/9202).
- JSR 303 bean level validation support (https://github.com/vaadin/framework/issues/8498).
- JSR 303 validation groups support (https://github.com/vaadin/framework/issues/8385).
- JSR 303 @Valid support (https://github.com/vaadin/framework/issues/9520)
- unbind() method.
- Support for automatic binding of nested beans (https://github.com/vaadin/framework/issues/9210)
- Proper null-conversions (https://github.com/vaadin/framework/issues/8441, https://github.com/vaadin/framework/issues/9000 and https://github.com/vaadin/framework/issues/9453)
- Binding with value-provider supports JSR 303 validation (https://github.com/vaadin/framework/issues/8815)
- Properties are displayed in correct order in Grid's
- Grid property displays uses same converter sets as forms
- Automatic editor for Grid building
- "Naked objects" inspired automatic form-builder.
- Easily extendable, most internal classes, methods and fields are declared protected.
Limitations compared with Vaadin 8 standard binder:
- No readBean()/writeBean() support, only setBean() is supported.
- No fluent-api binder builder (but can be easily added).
# Usage
Given the following Entity:
```
class MyEntity {
@NotNull
String name;
int height;
@Temporal(TemporalType.DATE)
Date dateOfBirth;
@Temporal(TemporalType.TIMESTAMP)
Date timeAndDate;
... getters and setters...
}
```
It can be bound using one of the following approaches:
# Method 1: Auto binding to existing Form fields
```
class MyForm {
TextField name = new TextField("Name");
TextField height = new TextField("Height");
DateField dateOfBirth = new DateField("Date of birth");
DateTimeField timeAndDate = new DateTimeField("Time and date");
}
MyForm form = new MyForm();
AutoBinder binder = new AutoBinder<>(MyEntity.class);
// Perform binding
binder.bindInstanceFields(form);
// Add components to form
addComponents(binder.getBoundFields());
// Set entity
MyEntity entity = new MyEntity();
binder.setBean(entity);
```
# Method 2: Auto creation of Form fields
```
AutoBinder binder = new AutoBinder<>(MyEntity.class);
// Perform field creation, binding and add components to form
addComponents(
binder.buildAndBind()
);
// Set entity
MyEntity entity = new MyEntity();
binder.setBean(entity);
```
# Build a Grid
```
AutoBinder binder = new AutoBinder<>(MyEntity.class);
binder.buildAndBind();
EGrid grid = new EGrid<>(binder);
grid.setItems(..., ...);
grid.getEditor().setEnabled(true);
```
# Register custom converters and builders
ConverterRegistry.registerConverter() can be used to register custom converters.
ComponentFactoryRegistry().addBuildPattern() can be used to register custom UI component factories.
Issue TrackerSource Code
easybinder version 0.4
Highlights:
- More default converters and builders
- Added Grid binding support
easybinder version 0.5
Highlights:
- Supports Vaadin 8.2
- Added methods for retrieving conversion and validation errors
- Minor bugfixes
easybinder version 0.6.0
Highlights:
- Supports Java9+
- Supports recent versions of Vaadin 8