Updated Branches: refs/heads/wicket-6.x 7cc191318 -> 28e1b0fe4
WICKET-5500 Ignore the path parameters when reading the page class Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/28e1b0fe Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/28e1b0fe Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/28e1b0fe Branch: refs/heads/wicket-6.x Commit: 28e1b0fe4c297633453c92a0fd36bbac77a93784 Parents: 8299990 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Feb 6 11:24:20 2014 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Feb 6 11:25:03 2014 +0100 ---------------------------------------------------------------------- .../request/mapper/AbstractComponentMapper.java | 23 ++++++++++++++++++-- .../core/request/mapper/PackageMapper.java | 3 ++- .../request/mapper/BookmarkableMapperTest.java | 16 ++++++++++++++ .../core/request/mapper/PackageMapperTest.java | 15 +++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/28e1b0fe/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java index b1480ee..efd77c6 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java @@ -130,9 +130,28 @@ public abstract class AbstractComponentMapper extends AbstractMapper implements */ protected Class<? extends IRequestablePage> getPageClass(String name) { - Args.notEmpty(name, "name"); + String cleanedClassName = cleanClassName(name); + return WicketObjects.resolveClass(cleanedClassName); + } + + /** + * Cleans the class name from any extra information that may be there. + * + * @param className + * The raw class name parsed from the url + * @return The cleaned class name + */ + protected String cleanClassName(String className) + { + Args.notEmpty(className, "className"); + + if (Strings.indexOf(className, ';') > -1) + { + // remove any path parameters set manually by the user. WICKET-5500 + className = Strings.beforeFirst(className, ';'); + } - return WicketObjects.resolveClass(name); + return className; } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/28e1b0fe/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java index 63e5914..b8a29ff 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java @@ -136,7 +136,8 @@ public class PackageMapper extends AbstractBookmarkableMapper PageComponentInfo info = getPageComponentInfo(url); // load the page class - String className = url.getSegments().get(0); + String name = url.getSegments().get(0); + String className = cleanClassName(name); if (isValidClassName(className) == false) { http://git-wip-us.apache.org/repos/asf/wicket/blob/28e1b0fe/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java index 07850a3..9138bfa 100644 --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java @@ -77,6 +77,22 @@ public class BookmarkableMapperTest extends AbstractMapperTest } /** + * https://issues.apache.org/jira/browse/WICKET-5500 + */ + @Test + public void decodePageClassWithPathParameters() + { + Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + ";something=else"); + IRequestHandler handler = encoder.mapRequest(getRequest(url)); + + assertTrue(handler instanceof RenderPageRequestHandler); + IRequestablePage page = ((RenderPageRequestHandler)handler).getPage(); + assertEquals(PAGE_CLASS_NAME, page.getClass().getName()); + assertEquals(0, page.getPageParameters().getIndexedCount()); + assertTrue(page.getPageParameters().getNamedKeys().isEmpty()); + } + + /** * */ @Test http://git-wip-us.apache.org/repos/asf/wicket/blob/28e1b0fe/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java index b08b112..15f339d 100644 --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java @@ -115,6 +115,21 @@ public class PackageMapperTest extends AbstractMapperTest assertEquals(0, page.getPageParameters().getIndexedCount()); assertTrue(page.getPageParameters().getNamedKeys().isEmpty()); } + /** + * https://issues.apache.org/jira/browse/WICKET-5500 + */ + @Test + public void decodePageClassWithPathParameters() + { + Url url = Url.parse(PAGE_CLASS_NAME + ";something=else"); + IRequestHandler handler = encoder.mapRequest(getRequest(url)); + + assertTrue(handler instanceof RenderPageRequestHandler); + IRequestablePage page = ((RenderPageRequestHandler)handler).getPage(); + assertEquals(PAGE_CLASS_NAME, page.getClass().getSimpleName()); + assertEquals(0, page.getPageParameters().getIndexedCount()); + assertTrue(page.getPageParameters().getNamedKeys().isEmpty()); + } /** *
