From 11f8811eb0f7a306c403d36ab45f5d8658d7a164 Mon Sep 17 00:00:00 2001 From: Patrik Lindström Date: Wed, 31 Jul 2013 16:42:16 +0300 Subject: Make sure bean field validators are only added once (#11045) Change-Id: I67779fa5bfd4c850101c11c22091c988eb65b808 --- .../src/com/vaadin/data/fieldgroup/BeanFieldGroup.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'server/src') diff --git a/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java b/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java index 0b4e3a8049..cb8a044f00 100644 --- a/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java +++ b/server/src/com/vaadin/data/fieldgroup/BeanFieldGroup.java @@ -16,6 +16,8 @@ package com.vaadin.data.fieldgroup; import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; import com.vaadin.data.Item; import com.vaadin.data.util.BeanItem; @@ -27,9 +29,11 @@ public class BeanFieldGroup extends FieldGroup { private Class beanType; private static Boolean beanValidationImplementationAvailable = null; + private final Map, BeanValidator> defaultValidators; public BeanFieldGroup(Class beanType) { this.beanType = beanType; + this.defaultValidators = new HashMap, BeanValidator>(); } @Override @@ -170,17 +174,29 @@ public class BeanFieldGroup extends FieldGroup { return super.buildAndBind(caption, propertyId); } + @Override + public void unbind(Field field) throws BindException { + super.unbind(field); + + BeanValidator removed = defaultValidators.remove(field); + if (removed != null) { + field.removeValidator(removed); + } + } + @Override protected void configureField(Field field) { super.configureField(field); // Add Bean validators if there are annotations - if (isBeanValidationImplementationAvailable()) { + if (isBeanValidationImplementationAvailable() + && !defaultValidators.containsKey(field)) { BeanValidator validator = new BeanValidator(beanType, getPropertyId(field).toString()); field.addValidator(validator); if (field.getLocale() != null) { validator.setLocale(field.getLocale()); } + defaultValidators.put(field, validator); } } -- cgit v1.2.3