Repository: wicket Updated Branches: refs/heads/master 0b0158b47 -> cf910b031
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/cf910b03 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cf910b03 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cf910b03 Branch: refs/heads/master Commit: cf910b0317b60e55b5b9946c857d88102ee600b4 Parents: 0b0158b 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 15:05:27 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/cf910b03/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 c563f41..fa19179 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.IRequestListener; 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,28 +78,28 @@ public abstract class AbstractAjaxBehavior extends Behavior implements IRequestL */ 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"); } - return getComponent().urlForListener(this, 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 getComponent().urlForListener(this, 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/cf910b03/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..57d4eb1 --- /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.0-link"))); + } + + @Test + public void withPathParameters() { + String callbackUrl = getCallbackUrl("/a/${b}/${c}"); + assertThat(callbackUrl, is(equalTo("./a/BBB/CCC?0-1.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(); + } + + 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>"); + } + } +}
