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());
 	}
 
 	/**