Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x e95307f2c -> 9b3d644ac


WICKET-6192 Remove recreateBookmarkablePagesAfterExpiry check in 
AbstractBookmarkableMapper#mapHandler


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9b3d644a
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9b3d644a
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9b3d644a

Branch: refs/heads/wicket-7.x
Commit: 9b3d644ac37a9b67f752ea48d1895f71a57aa92a
Parents: e95307f
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Mon Aug 15 14:59:39 2016 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Mon Aug 15 14:59:39 2016 +0200

----------------------------------------------------------------------
 .../wicket/behavior/AbstractAjaxBehavior.java   | 21 +++--
 .../wicket/behavior/AjaxCallbackUrlTest.java    | 95 ++++++++++++++++++++
 2 files changed, 107 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/9b3d644a/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
 
b/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
index 5a25fc9..a177cb2 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
@@ -19,9 +19,12 @@ package org.apache.wicket.behavior;
 import org.apache.wicket.Component;
 import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.request.mapper.parameter.INamedParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
 
+import java.util.List;
+
 /**
  * Abstract class for handling Ajax roundtrips. This class serves as a base 
for javascript specific
  * implementations, like ones based on Dojo or Scriptaculous, or Wicket's 
default.
@@ -75,7 +78,8 @@ public abstract class AbstractAjaxBehavior extends Behavior 
implements IBehavior
         */
        public CharSequence getCallbackUrl()
        {
-               if (getComponent() == null)
+               Component component = getComponent();
+               if (component == null)
                {
                        throw new IllegalArgumentException(
                                "Behavior must be bound to a component to 
create the URL");
@@ -85,22 +89,21 @@ public abstract class AbstractAjaxBehavior extends Behavior 
implements IBehavior
 
                rli = IBehaviorListener.INTERFACE;
 
-               return getComponent().urlFor(this, rli, new PageParameters());
+               PageParameters parameters = new PageParameters();
+               PageParameters pageParameters = 
component.getPage().getPageParameters();
+               List<INamedParameters.NamedPair> allNamedInPath = 
pageParameters.getAllNamedByType(INamedParameters.Type.PATH);
+               for (INamedParameters.NamedPair namedPair : allNamedInPath) {
+                       parameters.add(namedPair.getKey(), 
namedPair.getValue(), INamedParameters.Type.PATH);
+               }
+               return component.urlFor(this, rli, parameters);
        }
 
-       /**
-        * @see 
org.apache.wicket.behavior.Behavior#onComponentTag(org.apache.wicket.Component,
-        *      org.apache.wicket.markup.ComponentTag)
-        */
        @Override
        public final void onComponentTag(final Component component, final 
ComponentTag tag)
        {
                onComponentTag(tag);
        }
 
-       /**
-        * @see 
org.apache.wicket.behavior.Behavior#afterRender(org.apache.wicket.Component)
-        */
        @Override
        public final void afterRender(final Component hostComponent)
        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/9b3d644a/wicket-core/src/test/java/org/apache/wicket/behavior/AjaxCallbackUrlTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/behavior/AjaxCallbackUrlTest.java 
b/wicket-core/src/test/java/org/apache/wicket/behavior/AjaxCallbackUrlTest.java
new file mode 100644
index 0000000..e6ce785
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/behavior/AjaxCallbackUrlTest.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.behavior;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.mapper.parameter.INamedParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.Test;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Test for https://issues.apache.org/jira/browse/WICKET-6192
+ */
+public class AjaxCallbackUrlTest extends WicketTestCase {
+
+    @Test
+    public void withoutPathParameters() {
+        String callbackUrl = getCallbackUrl("/a/b/c");
+        assertThat(callbackUrl, 
is(equalTo("./a/b/c?0-1.IBehaviorListener.0-link")));
+    }
+
+    @Test
+    public void withPathParameters() {
+        String callbackUrl = getCallbackUrl("/a/${b}/${c}");
+        assertThat(callbackUrl, 
is(equalTo("./a/BBB/CCC?0-1.IBehaviorListener.0-link")));
+    }
+
+    private String getCallbackUrl(final String pageMountPath) {
+
+        WebApplication application = tester.getApplication();
+        application.mountPage(pageMountPath, TestPage.class);
+        
application.getPageSettings().setRecreateBookmarkablePagesAfterExpiry(false);
+
+        PageParameters pageParameters = new PageParameters();
+        pageParameters.set("b", "BBB", INamedParameters.Type.PATH);
+        pageParameters.set("c", "CCC", INamedParameters.Type.PATH);
+
+        TestPage page = tester.startPage(TestPage.class, pageParameters);
+
+        return page.getAjaxCallbackUrl().toString();
+    }
+
+    public static class TestPage extends WebPage implements 
IMarkupResourceStreamProvider
+    {
+
+        private final AbstractAjaxBehavior ajaxBehavior;
+
+        public TestPage()
+        {
+            WebMarkupContainer link = new WebMarkupContainer("link");
+            add(link);
+
+            ajaxBehavior = new AbstractAjaxBehavior() {
+                @Override
+                public void onRequest() {
+
+                }
+            };
+            link.add(ajaxBehavior);
+        }
+
+        private String getAjaxCallbackUrl()
+        {
+            return ajaxBehavior.getCallbackUrl().toString();
+        }
+
+        @Override
+        public IResourceStream getMarkupResourceStream(final MarkupContainer 
container, final Class<?> containerClass) {
+            return new StringResourceStream("<html><body><a 
wicket:id='link'>Link</a></body></html>");
+        }
+    }
+}

Reply via email to