Repository: wicket Updated Branches: refs/heads/WICKET-6523-unique-timer-id [created] edb8c370a
[WICKET-6523] unique suffix is added if more than 1 timer behaviour is added for the component Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/edb8c370 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/edb8c370 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/edb8c370 Branch: refs/heads/WICKET-6523-unique-timer-id Commit: edb8c370a6989cbfdc1ca53b382a8e1caea3e103 Parents: 1d20044 Author: Maxim Solodovnik <solomax...@gmail.com> Authored: Fri Jan 26 11:50:19 2018 +0700 Committer: Maxim Solodovnik <solomax...@gmail.com> Committed: Fri Jan 26 11:50:19 2018 +0700 ---------------------------------------------------------------------- .../wicket/ajax/AbstractAjaxTimerBehavior.java | 36 ++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/edb8c370/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java index 7fd3606..2fc9959 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.ajax; +import java.util.List; + import org.apache.wicket.Component; import org.apache.wicket.Page; import org.apache.wicket.core.request.handler.IPartialPageRequestHandler; @@ -44,6 +46,7 @@ public abstract class AbstractAjaxTimerBehavior extends AbstractDefaultAjaxBehav private Duration updateInterval; private boolean stopped = false; + private String timerId = null; /** * Construct. @@ -93,6 +96,35 @@ public abstract class AbstractAjaxTimerBehavior extends AbstractDefaultAjaxBehav } /** + * Can be overridden to provide different implementation + * + * @return the unique ID of JS timer + */ + protected CharSequence createTimerId() + { + StringBuilder jsId = new StringBuilder(getComponent().getMarkupId()); + List<AbstractAjaxTimerBehavior> list = getComponent().getBehaviors(AbstractAjaxTimerBehavior.class); + if (list.size() != 1) + { + for (int i = 0; i < list.size(); ++i) + { + if (list.get(i) == this) + { + jsId.append('_').append(i); + } + } + } + return jsId; + } + + private final String getTimerId() { + if (timerId == null) { + timerId = createTimerId().toString(); + } + return timerId; + } + + /** * @param updateInterval * Duration between AJAX callbacks * @return JS script @@ -102,7 +134,7 @@ public abstract class AbstractAjaxTimerBehavior extends AbstractDefaultAjaxBehav CharSequence js = getCallbackScript(); return String.format("Wicket.Timer.set('%s', function(){%s}, %d);", - getComponent().getMarkupId(), js, updateInterval.getMilliseconds()); + getTimerId(), js, updateInterval.getMilliseconds()); } /** @@ -187,7 +219,7 @@ public abstract class AbstractAjaxTimerBehavior extends AbstractDefaultAjaxBehav private void clearTimeout(Component component, IHeaderResponse headerResponse) { - headerResponse.render(OnLoadHeaderItem.forScript("Wicket.Timer.clear('" + component.getMarkupId() + "');")); + headerResponse.render(OnLoadHeaderItem.forScript("Wicket.Timer.clear('" + getTimerId() + "');")); } /**