Directory

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