WICKET-5071 404 Error on Nested ModalWindows in IE7 and IE8
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d3d42d42 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d3d42d42 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d3d42d42 Branch: refs/heads/master Commit: d3d42d42c5b71a2792c876498aaa898be94f67d4 Parents: f38d32e Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Jun 17 10:40:48 2013 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Jun 17 10:41:17 2013 +0200 ---------------------------------------------------------------------- .../core/request/mapper/BookmarkableMapper.java | 5 ++ .../core/request/mapper/PageInstanceMapper.java | 6 ++- .../request/mapper/BookmarkableMapperTest.java | 56 ++++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/d3d42d42/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java index 1fd71d6..a9fd212 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BookmarkableMapper.java @@ -190,6 +190,11 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper { matches = true; } + // baseUrl = 'bookmarkable/com.example.SomePage', requestUrl = 'bookmarkable/com.example.SomePage' + else if (baseUrl.getSegments().size() == 2 && urlStartsWith(baseUrl, bookmarkableIdentifier) && url.getSegments().size() == 2 && urlStartsWith(url, bookmarkableIdentifier)) + { + matches = true; + } // baseUrl = 'wicket/page[?...]', requestUrl = 'bookmarkable/com.example.SomePage' else if (baseUrl.getSegments().size() == 2 && urlStartsWith(baseUrl, namespace, pageIdentifier) && url.getSegments().size() >= 2 && urlStartsWith(url, bookmarkableIdentifier)) { http://git-wip-us.apache.org/repos/asf/wicket/blob/d3d42d42/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PageInstanceMapper.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PageInstanceMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PageInstanceMapper.java index 3789a9f..a034642 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PageInstanceMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PageInstanceMapper.java @@ -175,17 +175,19 @@ public class PageInstanceMapper extends AbstractComponentMapper { boolean matches = false; Url url = request.getUrl(); + Url baseUrl = request.getClientUrl(); String namespace = getContext().getNamespace(); String pageIdentifier = getContext().getPageIdentifier(); + if (urlStartsWith(url, namespace, pageIdentifier)) { matches = true; } - else if (urlStartsWith(request.getClientUrl(), namespace, pageIdentifier) && urlStartsWith(url, pageIdentifier)) + else if (urlStartsWith(baseUrl, namespace, pageIdentifier) && urlStartsWith(url, pageIdentifier)) { matches = true; } - else if (urlStartsWith(request.getClientUrl(), pageIdentifier) && urlStartsWith(url, pageIdentifier)) + else if (urlStartsWith(baseUrl, pageIdentifier) && urlStartsWith(url, pageIdentifier)) { matches = true; } http://git-wip-us.apache.org/repos/asf/wicket/blob/d3d42d42/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 874a525..4b71b65 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 @@ -357,6 +357,62 @@ public class BookmarkableMapperTest extends AbstractMapperTest } /** + * WICKET-5071 + * + * Decodes a request to {@link org.apache.wicket.core.request.mapper.IMapperContext#getBookmarkableIdentifier()}/com.example.MyPage + * when the current base url is + * {@link org.apache.wicket.core.request.mapper.IMapperContext#getNamespace()}/{@link org.apache.wicket.core.request.mapper.IMapperContext#getPageIdentifier()} + */ + @Test + public void decode13() + { + final Url url = Url.parse(context.getBookmarkableIdentifier() + "/" + PAGE_CLASS_NAME); + + Request request = new Request() + { + @Override + public Url getUrl() + { + return url; + } + + @Override + public Locale getLocale() + { + return null; + } + + @Override + public Charset getCharset() + { + return Charset.forName("UTF-8"); + } + + @Override + public Url getClientUrl() + { + StringBuilder url = new StringBuilder(); + url.append(context.getBookmarkableIdentifier()) + .append('/') + .append(PAGE_CLASS_NAME); + return Url.parse(url.toString()); + } + + @Override + public Object getContainerRequest() + { + return null; + } + }; + + IRequestHandler handler = encoder.mapRequest(request); + assertNotNull("A handler should be resolved for relative url to a bookmarkable page url!", handler); + + IRequestablePage page = ((IPageRequestHandler) handler).getPage(); + assertEquals(page.getClass().getName(), PAGE_CLASS_NAME); + } + + /** * */ @Test
