aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur <artur@vaadin.com>2017-05-19 14:48:42 +0300
committerTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>2017-07-11 10:01:02 +0300
commit136ac9640d2c08cf74d02c04930ba164c0d2e2ad (patch)
tree0327c8e04dba6589a4093ab266676fb6c8d63eed
parentc0227397f5e09a4e7057c65559ee1512936a4f2f (diff)
downloadvaadin-framework-136ac9640d2c08cf74d02c04930ba164c0d2e2ad.tar.gz
vaadin-framework-136ac9640d2c08cf74d02c04930ba164c0d2e2ad.zip
Clear errors when clearing binder fields (#9364)
Calling readBean(null) should reset the form state to the initial state it was in before calling writeBean(bean)
-rw-r--r--server/src/main/java/com/vaadin/data/Binder.java5
-rw-r--r--server/src/test/java/com/vaadin/data/BinderTest.java20
2 files changed, 24 insertions, 1 deletions
diff --git a/server/src/main/java/com/vaadin/data/Binder.java b/server/src/main/java/com/vaadin/data/Binder.java
index 56bb9a6656..ce843afacc 100644
--- a/server/src/main/java/com/vaadin/data/Binder.java
+++ b/server/src/main/java/com/vaadin/data/Binder.java
@@ -1561,7 +1561,10 @@ public class Binder<BEAN> implements Serializable {
* Clear all the bound fields for this binder.
*/
private void clearFields() {
- bindings.forEach(binding -> binding.getField().clear());
+ bindings.forEach(binding -> {
+ binding.getField().clear();
+ clearError(binding.getField());
+ });
if (hasChanges()) {
fireStatusChangeEvent(false);
}
diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java
index ee92c86f58..7afdfb3fa0 100644
--- a/server/src/test/java/com/vaadin/data/BinderTest.java
+++ b/server/src/test/java/com/vaadin/data/BinderTest.java
@@ -441,6 +441,26 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> {
}
@Test
+ public void readNullBeanRemovesError() {
+ TextField textField = new TextField();
+ binder.forField(textField).asRequired("foobar")
+ .bind(Person::getFirstName, Person::setFirstName);
+ Assert.assertTrue(textField.isRequiredIndicatorVisible());
+ Assert.assertNull(textField.getErrorMessage());
+
+ binder.readBean(item);
+ Assert.assertNull(textField.getErrorMessage());
+
+ textField.setValue(textField.getEmptyValue());
+ Assert.assertTrue(textField.isRequiredIndicatorVisible());
+ Assert.assertNotNull(textField.getErrorMessage());
+
+ binder.readBean(null);
+ assertTrue(textField.isRequiredIndicatorVisible());
+ Assert.assertNull(textField.getErrorMessage());
+ }
+
+ @Test
public void setRequired_withErrorMessageProvider_fieldGetsRequiredIndicatorAndValidator() {
TextField textField = new TextField();
textField.setLocale(Locale.CANADA);