diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Util.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Util.java index 14cc8fb4c..dadfb014a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Util.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Util.java @@ -26,6 +26,7 @@ import static org.navalplanner.web.I18nHelper._; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; +import java.util.Iterator; import java.util.List; import org.zkoss.ganttz.util.ComponentsFinder; @@ -578,4 +579,23 @@ public class Util { return ifNotFound.createAt(container); } + /** + * It removes all listeners registered for eventName and adds the new + * listener. It's ensured that the only listener left in the component for + * events of name eventName is uniqueListener + * + * @param component + * @param eventName + * @param uniqueListener + */ + public static void ensureUniqueListener(Component component, String eventName, + EventListener uniqueListener) { + Iterator listenerIterator = component.getListenerIterator(eventName); + while (listenerIterator.hasNext()) { + listenerIterator.next(); + listenerIterator.remove(); + } + component.addEventListener(eventName, uniqueListener); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java index 0fa0640b1..f3db8d515 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java @@ -75,8 +75,9 @@ public class TaskInformation extends HtmlMacroComponent { gridTaskRows.setRowRenderer(newTaskRowsRenderer()); } - public void onRecomendAllocation(EventListener event) { - btnRecommendedAllocation.addEventListener(Events.ON_CLICK, event); + public void onRecomendAllocation(EventListener eventListener) { + Util.ensureUniqueListener(btnRecommendedAllocation, Events.ON_CLICK, + eventListener); } public void showRecomendedAllocationButton() {