vaadin 7 fieldgroup & converter

23
Paris Vaadin & GWT Meetup

Upload: nicolas-frankel

Post on 25-May-2015

5.338 views

Category:

Documents


8 download

DESCRIPTION

Vaadin 7 FieldGroup & Converter presentation for the Vaadin & GWT Developer Meetup Paris 2013

TRANSCRIPT

Page 1: Vaadin 7 FieldGroup & Converter

Paris Vaadin & GWT Meetup

Page 2: Vaadin 7 FieldGroup & Converter

Bio @nicolas_frankel

Software Architect

http://blog.frankel.ch & http://morevaadin.com

Learning Vaadin

Main interests: GUI Software quality Build automation New things!

Page 3: Vaadin 7 FieldGroup & Converter

Vaadin 7 revolutions

SASS

Connectors

Client-side extensions

Page 4: Vaadin 7 FieldGroup & Converter

Vaadin 7 evolutions

Window API

Javascript API

FieldGroup

Converter

Page 5: Vaadin 7 FieldGroup & Converter

FieldGroup

Remember the old Form? It coupled display & field handling It is deprecated

Use FieldGroup And set the layout you want!

Page 6: Vaadin 7 FieldGroup & Converter

Data binding levels

1. Property Single value

Birthdate

2. Item Connected properties

First name, last name, birthdate

3. Container Collection of items

FieldGroup

Page 7: Vaadin 7 FieldGroup & Converter

Example

Person person = new Person(1L);

person.setFirstName("John");

person.setLastName("Doe");

person.setBirthdate(new Date(0));

BeanItem<Person> item = new BeanItem<Person>(person);

Page 8: Vaadin 7 FieldGroup & Converter

Naive implementation

TextField id = new TextField (item.getItemProperty("id"));

TextField firstName = new TextField(item.getItemProperty("firstName"));

TextField lastName = new TextField(item.getItemProperty("lastName"));

DateField birthdate = new DateField(item.getItemProperty("birthdate"));

Layout layout = new FormLayout(id, firstName, lastName, birthdate);

Page 9: Vaadin 7 FieldGroup & Converter

Result

Page 10: Vaadin 7 FieldGroup & Converter

FieldGroup implementation

FieldGroup group = new FieldGroup(item);

Field<?> id = group.buildAndBind("id");

Field<?> firstName = group.buildAndBind("firstName");

Field<?> lastName = group.buildAndBind("lastName");

Field<?> birthdate = group.buildAndBind("birthdate");

Layout layout = new VerticalLayout(id, firstName, lastName, birthdate);

Page 11: Vaadin 7 FieldGroup & Converter

Result

Page 12: Vaadin 7 FieldGroup & Converter
Page 13: Vaadin 7 FieldGroup & Converter

Custom FieldGroupFieldFactory

@Override

public <T extends Field> T createField(Class<?> dataType, Class<T> fieldType) {

if (dataType.isAssignableFrom(Date.class)) {

return (T) new DateField();

}

return delegate.createField(dataType, fieldType);

}

Page 14: Vaadin 7 FieldGroup & Converter

Rework

group.setFieldFactory(new CustomFieldGroupFieldFactory());

Layout layout = new FormLayout(id, firstName, lastName, birthdate);

Page 15: Vaadin 7 FieldGroup & Converter

Result

Page 16: Vaadin 7 FieldGroup & Converter

Final rework

Field<?> id = group.buildAndBind(null, "id");

Field<?> firstName = group.buildAndBind("Given name", "firstName");

Field<?> lastName = group.buildAndBind("Family name", "lastName");

Page 17: Vaadin 7 FieldGroup & Converter

Result

Page 18: Vaadin 7 FieldGroup & Converter

Converters

Separate model values from their String representations

Provides ways to convert From String to model And back

Page 19: Vaadin 7 FieldGroup & Converter

Converter hierarchy

Page 20: Vaadin 7 FieldGroup & Converter

Requirements

No side-effects, including GUI changes

Method implementation need to be symmetric

Page 21: Vaadin 7 FieldGroup & Converter

Implementation

TextField tf = new TextField();

tf.setConverter(new StringToIntegerConverter());

int i = (Integer) tf.getConvertedValue();

Page 22: Vaadin 7 FieldGroup & Converter

@learnvaadin

Page 23: Vaadin 7 FieldGroup & Converter

Thanks… & questions?