You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/01/14 10:36:52 UTC
git commit: WICKET-4441 PageProvider should create a new Page
instance if PageParameters are changed, even if a stored page exists.
Updated Branches:
refs/heads/sandbox/WICKET-4441-create-new-page-hybrid-url-with-different-parameters [created] a53591f03
WICKET-4441 PageProvider should create a new Page instance if PageParameters are changed, even if a stored page exists.
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a53591f0
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a53591f0
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a53591f0
Branch: refs/heads/sandbox/WICKET-4441-create-new-page-hybrid-url-with-different-parameters
Commit: a53591f030b87b5d1552e567226705020dee2a62
Parents: 565346c
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jan 14 11:36:22 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jan 14 11:36:22 2014 +0200
----------------------------------------------------------------------
.../mapper/AbstractBookmarkableMapper.java | 7 ++++++
.../request/mapper/BookmarkableMapperTest.java | 25 ++++++++++++++++----
.../core/request/mapper/MountedMapperTest.java | 25 ++++++++++++++++----
.../core/request/mapper/PackageMapperTest.java | 25 ++++++++++++++++----
4 files changed, 70 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/a53591f0/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
index 5074ac0..a1cb05f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
@@ -246,6 +246,13 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
}
else
{
+ PageParameters constructionPageParameters = provider.getPageInstance().getPageParameters();
+ if (PageParameters.equals(constructionPageParameters, pageParameters) == false)
+ {
+ // create a fresh page instance because the request page parameters are different than the ones
+ // when the resolved page by id has been created
+ return new RenderPageRequestHandler(new PageProvider(pageClass, pageParameters));
+ }
return new RenderPageRequestHandler(provider);
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/a53591f0/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 f1db41b..c8c2a0f 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
@@ -99,7 +99,11 @@ public class BookmarkableMapperTest extends AbstractMapperTest
}
/**
+ * The tests resolves pages by id as if they were existed in the page store.
+ * These pages have no page parameters (i.e. page.getPageParameters() == null).
*
+ * The request that the encoder does also has no parameters (neither in the path
+ * nor in the query string) so the resolved page is assumed to be valid.
*/
@Test
public void decode3()
@@ -113,7 +117,18 @@ public class BookmarkableMapperTest extends AbstractMapperTest
}
/**
+ * The tests resolves pages by id as if they were existed in the page store.
+ * These pages have no page parameters (i.e. page.getPageParameters() == null).
*
+ * Since Wicket 7.0.0 (WICKET-4441) if a new request to hybrid url
+ * (a url with both mount path and pageId) has different page parameters
+ * than the resolved page then a new page instance with the new parameters
+ * is created.
+ * This way if a user manipulates manually the product id in url like:
+ * /wicket/bookmarkable/my.Product?3&id=23
+ * to
+ * /wicket/bookmarkable/my.Product?3&id=24
+ * then Wicket will create a new page that will show product=24
*/
@Test
public void decode4()
@@ -122,13 +137,15 @@ public class BookmarkableMapperTest extends AbstractMapperTest
IRequestHandler handler = encoder.mapRequest(getRequest(url));
assertThat(handler, instanceOf(RenderPageRequestHandler.class));
- IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
- checkPage(page, 15);
+ RenderPageRequestHandler h = (RenderPageRequestHandler) handler;
+ ((PageProvider) h.getPageProvider()).setPageSource(context);
+ IRequestablePage page = h.getPage();
+ checkPage(page, 1);
PageParameters p = page.getPageParameters();
- assertEquals(0, p.getIndexedCount());
+ assertEquals(2, p.getIndexedCount());
- assertEquals(0, p.getNamedKeys().size());
+ assertEquals(2, p.getNamedKeys().size());
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/a53591f0/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
index 04ca930..0024874 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/MountedMapperTest.java
@@ -152,7 +152,11 @@ public class MountedMapperTest extends AbstractMapperTest
}
/**
+ * The tests resolves pages by id as if they were existed in the page store.
+ * These pages have no page parameters (i.e. page.getPageParameters() == null).
*
+ * The request that the encoder does also has no parameters (neither in the path
+ * nor in the query string) so the resolved page is assumed to be valid.
*/
@Test
public void decode3()
@@ -166,7 +170,18 @@ public class MountedMapperTest extends AbstractMapperTest
}
/**
+ * The tests resolves pages by id as if they were existed in the page store.
+ * These pages have no page parameters (i.e. page.getPageParameters() == null).
*
+ * Since Wicket 7.0.0 (WICKET-4441) if a new request to hybrid url
+ * (a url with both mount path and pageId) has different page parameters
+ * than the resolved page then a new page instance with the new parameters
+ * is created.
+ * This way if a user manipulates manually the product id in url like:
+ * /products/23?3
+ * to
+ * /products/24?3
+ * then Wicket will create a new page that will show product=24
*/
@Test
public void decode4()
@@ -175,13 +190,15 @@ public class MountedMapperTest extends AbstractMapperTest
IRequestHandler handler = encoder.mapRequest(getRequest(url));
assertThat(handler, instanceOf(RenderPageRequestHandler.class));
- IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
- checkPage(page, 15);
+ RenderPageRequestHandler h = (RenderPageRequestHandler) handler;
+ ((PageProvider) h.getPageProvider()).setPageSource(context);
+ IRequestablePage page = h.getPage();
+ checkPage(page, 1);
PageParameters p = page.getPageParameters();
- assertEquals(0, p.getIndexedCount());
+ assertEquals(2, p.getIndexedCount());
- assertEquals(0, p.getNamedKeys().size());
+ assertEquals(2, p.getNamedKeys().size());
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/a53591f0/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 2a4635b..e469b10 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
@@ -167,7 +167,11 @@ public class PackageMapperTest extends AbstractMapperTest
}
/**
+ * The tests resolves pages by id as if they were existed in the page store.
+ * These pages have no page parameters (i.e. page.getPageParameters() == null).
*
+ * The request that the encoder does also has no parameters (neither in the path
+ * nor in the query string) so the resolved page is assumed to be valid.
*/
@Test
public void decode3()
@@ -181,7 +185,18 @@ public class PackageMapperTest extends AbstractMapperTest
}
/**
+ * The tests resolves pages by id as if they were existed in the page store.
+ * These pages have no page parameters (i.e. page.getPageParameters() == null).
*
+ * Since Wicket 7.0.0 (WICKET-4441) if a new request to hybrid url
+ * (a url with both mount path and pageId) has different page parameters
+ * than the resolved page then a new page instance with the new parameters
+ * is created.
+ * This way if a user manipulates manually the product id in url like:
+ * /mount/path/Products/23?3
+ * to
+ * /mount/path/Products/24?3
+ * then Wicket will create a new page that will show product=24
*/
@Test
public void decode4()
@@ -190,13 +205,15 @@ public class PackageMapperTest extends AbstractMapperTest
IRequestHandler handler = encoder.mapRequest(getRequest(url));
assertThat(handler, instanceOf(RenderPageRequestHandler.class));
- IRequestablePage page = ((RenderPageRequestHandler)handler).getPage();
- checkPage(page, 15);
+ RenderPageRequestHandler h = (RenderPageRequestHandler) handler;
+ ((PageProvider) h.getPageProvider()).setPageSource(context);
+ IRequestablePage page = h.getPage();
+ checkPage(page, 1);
PageParameters p = page.getPageParameters();
- assertEquals(0, p.getIndexedCount());
+ assertEquals(2, p.getIndexedCount());
- assertEquals(0, p.getNamedKeys().size());
+ assertEquals(2, p.getNamedKeys().size());
}
/**