diff options
-rw-r--r-- | server/src/main/java/com/vaadin/data/Binder.java | 25 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/BinderTest.java | 21 |
2 files changed, 43 insertions, 3 deletions
diff --git a/server/src/main/java/com/vaadin/data/Binder.java b/server/src/main/java/com/vaadin/data/Binder.java index 8ca90ebaf8..03a6c1eb52 100644 --- a/server/src/main/java/com/vaadin/data/Binder.java +++ b/server/src/main/java/com/vaadin/data/Binder.java @@ -165,6 +165,16 @@ public class Binder<BEAN> implements Serializable { * @since 8.2 */ public void unbind(); + + /** + * Reads the value from given item and stores it to the bound field. + * + * @param bean + * the bean to read from + * + * @since 8.2 + */ + public void read(BEAN bean); } /** @@ -516,9 +526,11 @@ public class Binder<BEAN> implements Serializable { TARGET nullRepresentation) { return withConverter( fieldValue -> Objects.equals(fieldValue, nullRepresentation) - ? null : fieldValue, + ? null + : fieldValue, modelValue -> Objects.isNull(modelValue) - ? nullRepresentation : modelValue); + ? nullRepresentation + : modelValue); } /** @@ -1099,6 +1111,12 @@ public class Binder<BEAN> implements Serializable { public BindingValidationStatusHandler getValidationStatusHandler() { return statusHandler; } + + @Override + public void read(BEAN bean) { + field.setValue(converterValidatorChain.convertToPresentation( + getter.apply(bean), createValueContext())); + } } /** @@ -2299,7 +2317,8 @@ public class Binder<BEAN> implements Serializable { Converter<FIELDVALUE, FIELDVALUE> nullRepresentationConverter = Converter .from(fieldValue -> fieldValue, modelValue -> Objects.isNull(modelValue) - ? field.getEmptyValue() : modelValue, + ? field.getEmptyValue() + : modelValue, exception -> exception.getMessage()); ConverterDelegate<FIELDVALUE> converter = new ConverterDelegate<>( nullRepresentationConverter); diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java index 7b45ee95e0..b3bce11e87 100644 --- a/server/src/test/java/com/vaadin/data/BinderTest.java +++ b/server/src/test/java/com/vaadin/data/BinderTest.java @@ -990,4 +990,25 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> { assertNull("Age field should still be ok.", ageField.getComponentError()); } + + @Test + public void refreshValueFromBean() { + Binding<Person, String> binding = binder.bind(nameField, + Person::getFirstName, Person::setFirstName); + + binder.readBean(item); + + assertEquals("Name should be read from the item", item.getFirstName(), + nameField.getValue()); + + nameField.setValue("foo"); + + assertNotEquals("Name should be different from the item", + item.getFirstName(), nameField.getValue()); + + binding.read(item); + + assertEquals("Name should be read again from the item", + item.getFirstName(), nameField.getValue()); + } } |