Directory

← Back

easybinder

Easy bean binding for Vaadin 8 with JSR-303 support

Author

Rating

Popularity

<100

EasyBinder 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:

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<MyEntity> 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<MyEntity> 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<MyEntity> binder = new AutoBinder<>(MyEntity.class);
binder.buildAndBind();
EGrid<Flight> 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.

Sample code

class MyEntity {
	@NotNull
	String name;
	
	int height;
	
	@Temporal(TemporalType.DATE)	
	Date dateOfBirth;
	
	@Temporal(TemporalType.TIMESTAMP)	
	Date timeAndDate;	
	
	... getters and setters...
}

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<MyEntity> 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);
class MyEntity {
	@NotNull
	String name;
	
	int height;
	
	@Temporal(TemporalType.DATE)	
	Date dateOfBirth;
	
	@Temporal(TemporalType.TIMESTAMP)	
	Date timeAndDate;	
	
	... getters and setters...
}

AutoBinder<MyEntity> 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)
class MyEntity {
	@NotNull
	String name;
	
	int height;
	
	@Temporal(TemporalType.DATE)	
	Date dateOfBirth;
	
	@Temporal(TemporalType.TIMESTAMP)	
	Date timeAndDate;	
	
	... getters and setters...
}


AutoBinder<MyEntity> binder = new AutoBinder<>(MyEntity.class);

binder.buildAndBind();

EGrid<Flight> grid = new EGrid<>(binder);

grid.setItems(..., ...);

grid.getEditor().setEnabled(true);
ConverterRegistry.getInstance().registerConverter(LocalDate.class, Date.class, new LocalDateToDateConverter());
ComponentFactoryRegistry.getInstance().addBuildPattern(boolean.class, 
				e -> true,
				e -> new CheckBox(SharedUtil.camelCaseToHumanFriendly(e.getName()))
);

Compatibility

(Loading compatibility data...)

Was this helpful? Need more help?
Leave a comment or a question below. You can also join the chat on Discord or ask questions on StackOverflow.

Version

Highlights:

  • Supports Java9+
  • Supports recent versions of Vaadin 8
Released
2021-09-17
Maturity
EXPERIMENTAL
License
Apache License 2.0

Compatibility

Framework
Vaadin 8.0+
Browser
Browser Independent

easybinder - Vaadin Add-on Directory

Easy bean binding for Vaadin 8 with JSR-303 support easybinder - Vaadin Add-on Directory
EasyBinder 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 Tracker
Source Code

easybinder version 0.3
null

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

Online