From c8129cd292dcbb854bc7a7f58983aa42ca841f80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 10 Dec 2012 20:45:14 +0100 Subject: [PATCH] Bug #1590: Avoid repeated calls to goToOrdersList A mechanism for ignoring in a scope the calls to createBindings has been added. When accessing from the entry point the page is been created and the AnnotatedDataBinder created automatically will track the created tab. So in these cases we must ignore createBindings calls. --- .../java/org/libreplan/web/common/Util.java | 18 ++++++++++++++++++ .../common/entrypoints/EntryPointsHandler.java | 14 ++++++++++---- .../tabs/MultipleTabsPlannerController.java | 1 - 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java index 127bff48c..9d5add8b0 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java @@ -198,7 +198,25 @@ public class Util { return (DataBinder) component.getVariable("binder", false); } + private static final ThreadLocal ignoreCreateBindings = new ThreadLocal() { + protected Boolean initialValue() { + return false; + }; + }; + + public static void executeIgnoringCreationOfBindings(Runnable action) { + try { + ignoreCreateBindings.set(true); + action.run(); + } finally { + ignoreCreateBindings.set(false); + } + } + public static void createBindingsFor(org.zkoss.zk.ui.Component result) { + if (ignoreCreateBindings.get()) { + return; + } AnnotateDataBinder binder = new AnnotateDataBinder(result, true); result.setVariable("binder", binder, true); markAsNotReloadedForThisRequest(result); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/entrypoints/EntryPointsHandler.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/entrypoints/EntryPointsHandler.java index f190f8b41..e2a586442 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/entrypoints/EntryPointsHandler.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/entrypoints/EntryPointsHandler.java @@ -39,6 +39,7 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.libreplan.web.common.Util; import org.libreplan.web.common.converters.IConverter; import org.libreplan.web.common.converters.IConverterFactory; import org.zkoss.zk.ui.Execution; @@ -283,20 +284,25 @@ public class EntryPointsHandler { return applyIfMatches(controller, matrixParams); } - private boolean applyIfMatches(S controller, + private boolean applyIfMatches(final S controller, Map matrixParams) { flagAlreadyExecutedInThisRequest(); Set matrixParamsNames = matrixParams.keySet(); for (Entry entry : metadata.entrySet()) { - EntryPointMetadata entryPointMetadata = entry.getValue(); + final EntryPointMetadata entryPointMetadata = entry.getValue(); EntryPoint entryPointAnnotation = entryPointMetadata.annotation; HashSet requiredParams = new HashSet(Arrays .asList(entryPointAnnotation.value())); if (matrixParamsNames.equals(requiredParams)) { - Object[] arguments = retrieveArguments(matrixParams, + final Object[] arguments = retrieveArguments(matrixParams, entryPointAnnotation, entryPointMetadata.method .getParameterTypes()); - callMethod(controller, entryPointMetadata.method, arguments); + Util.executeIgnoringCreationOfBindings(new Runnable() { + public void run() { + callMethod(controller, entryPointMetadata.method, + arguments); + } + }); return true; } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java index 9cc20d977..1f5784e77 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/MultipleTabsPlannerController.java @@ -471,7 +471,6 @@ public class MultipleTabsPlannerController implements Composer, @Override public void goToOrdersList() { - // ordersTab.show(); getTabsRegistry().show(ordersTab); }