You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/08/06 16:43:00 UTC
git commit: WICKET-5302 Using InlineEnclosure leads to two
re-renderings of the controlling child component
Updated Branches:
refs/heads/master f0cfce83e -> fa0140223
WICKET-5302 Using InlineEnclosure leads to two re-renderings of the controlling child component
Pass the original/modifiable map of components added to the AjaxRequestTarget for re-rendering to all registered AjaxRequestTarget.IListeners.
This way they can modify it if needed
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/fa014022
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/fa014022
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/fa014022
Branch: refs/heads/master
Commit: fa01402233fb56abc0709bcdc6f6a6c008a1abc7
Parents: f0cfce8
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Aug 6 16:41:16 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Aug 6 16:41:16 2013 +0200
----------------------------------------------------------------------
.../apache/wicket/ajax/AjaxRequestHandler.java | 4 +---
.../apache/wicket/ajax/AjaxRequestTarget.java | 2 +-
.../protocol/http/AjaxEnclosureListener.java | 24 +++++++++++---------
.../markup/html/internal/TogglePageTest.java | 6 +++--
4 files changed, 19 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/fa014022/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
index 3de3519..a77f60f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
@@ -161,11 +161,9 @@ public class AjaxRequestHandler implements AjaxRequestTarget
if (listeners != null)
{
- final Map<String, Component> components = Collections.unmodifiableMap(markupIdToComponent);
-
for (AjaxRequestTarget.IListener listener : listeners)
{
- listener.onBeforeRespond(components, AjaxRequestHandler.this);
+ listener.onBeforeRespond(markupIdToComponent, AjaxRequestHandler.this);
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/fa014022/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
index 662fe1f..bf4c284 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
@@ -44,7 +44,7 @@ public interface AjaxRequestTarget extends IPageRequestHandler, ILoggableRequest
* Triggered before ajax request target begins its response cycle
*
* @param map
- * read-only map:markupId->component of components already added to the target
+ * modifiable map (markupId -> component) of components already added to the target
* @param target
* the target itself. Could be used to add components or to append/prepend
* javascript
http://git-wip-us.apache.org/repos/asf/wicket/blob/fa014022/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java
index 1c583a7..f07be63 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java
@@ -16,9 +16,6 @@
*/
package org.apache.wicket.protocol.http;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
import java.util.Map;
import org.apache.wicket.Component;
@@ -70,18 +67,16 @@ public class AjaxEnclosureListener extends AjaxRequestTarget.AbstractListener
@Override
public void onBeforeRespond(final Map<String, Component> map, final AjaxRequestTarget target)
{
- // We need to iterate over the map, but the map changes if we add an
- // InlineEnclosure to the target. --> make a copy of the map and iterate that instead.
- final List<Component> originalComponents = Collections.unmodifiableList(new ArrayList<Component>(
- map.values()));
-
- target.getPage().visitChildren(InlineEnclosure.class, new IVisitor<InlineEnclosure, Void>()
+ String key = target.getPage().visitChildren(InlineEnclosure.class, new IVisitor<InlineEnclosure, String>()
{
@Override
- public void component(final InlineEnclosure enclosure, final IVisit<Void> visit)
+ public void component(final InlineEnclosure enclosure, final IVisit<String> visit)
{
- for (Component component : originalComponents)
+ for (Map.Entry<String, Component> entry : map.entrySet())
{
+ String key = entry.getKey();
+ Component component = entry.getValue();
+
if (isControllerOfEnclosure(component, enclosure))
{
// update the visibility of the enclosure
@@ -89,10 +84,17 @@ public class AjaxEnclosureListener extends AjaxRequestTarget.AbstractListener
// add enclosure to Ajax target
target.add(enclosure);
+ visit.stop(key);
+ break;
}
}
}
});
+
+ if (key != null)
+ {
+ map.remove(key);
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/fa014022/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTest.java
index 8a843f0..7d48517 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTest.java
@@ -127,7 +127,9 @@ public class TogglePageTest extends WicketTestCase
{
// On
InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = (InlineEnclosureWithAdditionalAjaxTargetPage)tester.getLastRenderedPage();
- tester.assertComponentOnAjaxResponse(ajaxPage.getLabel1());
+ // WICKET-5302 - only the InlineEnclosure is in the Ajax response
+ // Label1 is inside the InlineEncosure
+ tester.assertComponentOnAjaxResponse("wicket_InlineEnclosure-0");
tester.assertComponentOnAjaxResponse(ajaxPage.getLabel2());
assertVisible(ajaxPage.getLabel1());
assertVisible(ajaxPage.getLabel2());
@@ -232,4 +234,4 @@ public class TogglePageTest extends WicketTestCase
}
-}
\ No newline at end of file
+}