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

Reply via email to