fix #7574 adding the ToOneRelatedEntityReloader to the TeamOrPerson and Person field...
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Fri, 20 Jul 2018 15:07:26 +0000 (17:07 +0200)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Fri, 20 Jul 2018 15:07:26 +0000 (17:07 +0200)
src/main/java/eu/etaxonomy/cdm/vaadin/component/common/TeamOrPersonField.java

index a7b84699e7f68ca606e055b0ab23a1553dc27618..f245b387f4c6d6b5ffba531846d83b5d2d72a97c 100644 (file)
@@ -117,7 +117,6 @@ public class TeamOrPersonField extends CompositeCustomField<TeamOrPersonBase<?>>
     protected Component initContent() {
 
         teamOrPersonSelect.addValueChangeListener(e -> {
-            teamOrPersonSelect.refresh();
             setValue(teamOrPersonSelect.getValue(), false, true);
         });
         teamOrPersonSelect.setWidthUndefined();
@@ -348,14 +347,15 @@ public class TeamOrPersonField extends CompositeCustomField<TeamOrPersonBase<?>>
 
     public void setFilterableTeamPagingProvider(CdmFilterablePagingProvider<AgentBase, TeamOrPersonBase> pagingProvider, CachingPresenter cachingPresenter){
         teamOrPersonSelect.loadFrom(pagingProvider, pagingProvider, pagingProvider.getPageSize());
-        ToOneRelatedEntityReloader<TeamOrPersonBase> teamOrPersonReloader = new ToOneRelatedEntityReloader<TeamOrPersonBase>(teamOrPersonSelect, cachingPresenter);
-        teamOrPersonSelect.addValueChangeListener(teamOrPersonReloader );
+        // NOTE:
+        //   it is important to add the ToOneRelatedEntityReloader to the TeamOrPersonField directly
+        //   since the value of the select will be immediately passed to the TeamOrPersonField
+        ToOneRelatedEntityReloader<TeamOrPersonBase<?>> teamOrPersonReloader = new ToOneRelatedEntityReloader<TeamOrPersonBase<?>>(this, cachingPresenter);
+        this.addValueChangeListener(teamOrPersonReloader);
     }
 
     public void setFilterablePersonPagingProvider(CdmFilterablePagingProvider<AgentBase, Person> pagingProvider, CachingPresenter cachingPresenter){
 
-        teamOrPersonSelect.addValueChangeListener(new ToOneRelatedEntityReloader<TeamOrPersonBase>(teamOrPersonSelect, cachingPresenter));
-
         personsListEditor.setEntityFieldInstantiator(new EntityFieldInstantiator<PersonField>() {
 
             @Override
@@ -364,7 +364,10 @@ public class TeamOrPersonField extends CompositeCustomField<TeamOrPersonBase<?>>
                 f.setAllowNewEmptyEntity(true); // otherwise new entities can not be added to the personsListEditor
                 f.getPersonSelect().loadFrom(pagingProvider, pagingProvider, pagingProvider.getPageSize());
                 f.getPersonSelect().setCaptionGenerator(new TeamOrPersonBaseCaptionGenerator<Person>(cacheType));
-                f.getPersonSelect().addValueChangeListener(new ToOneRelatedEntityReloader<Person>(f.getPersonSelect(), cachingPresenter));
+                // NOTE:
+                //   it is important to add the ToOneRelatedEntityReloader to the PersonField directly
+                //   since the value of the select will be immediately passed to the PersonField:
+                f.addValueChangeListener(new ToOneRelatedEntityReloader<Person>(f, cachingPresenter));
                 return f;
             }
         });