Updated Branches: refs/heads/master 6f9efd41b -> 1ac055336
WICKET-4775: keep multiple named values and absent indexed values Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1ac05533 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1ac05533 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1ac05533 Branch: refs/heads/master Commit: 1ac055336de5924d7df2b8106f3091df676a9df3 Parents: 6f9efd4 Author: Emond Papegaaij <[email protected]> Authored: Fri Sep 21 21:59:29 2012 +0200 Committer: Emond Papegaaij <[email protected]> Committed: Fri Sep 21 21:59:29 2012 +0200 ---------------------------------------------------------------------- .../request/mapper/parameter/PageParameters.java | 15 ++++++- .../mapper/parameter/PageParametersTest.java | 30 +++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/1ac05533/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java index 5c5391f..956ea75 100644 --- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java +++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParameters.java @@ -456,9 +456,20 @@ public class PageParameters implements IClusterable, IIndexedParameters, INamedP if (this != other) { for (int index = 0; index < other.getIndexedCount(); index++) - set(index, other.get(index)); + { + if (!other.get(index).isNull()) + { + set(index, other.get(index)); + } + } + for (String name : other.getNamedKeys()) + { + remove(name); + } for (NamedPair curNamed : other.getAllNamed()) - set(curNamed.getKey(), curNamed.getValue()); + { + add(curNamed.getKey(), curNamed.getValue()); + } } return this; } http://git-wip-us.apache.org/repos/asf/wicket/blob/1ac05533/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java index 528ff0c..71fcb4c 100644 --- a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java +++ b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersTest.java @@ -142,4 +142,34 @@ public class PageParametersTest extends Assert parameters.remove("named1", "value1"); assertEquals("value2", parameters.get("named1").toString()); } + + /** + * https://issues.apache.org/jira/browse/WICKET-4775 + * + * Merge PageParameters, also when other has multiple values for the same name + */ + @Test + public void mergeParameters() + { + PageParameters left = new PageParameters().add("left", "left") + .add("both", "both1") + .add("both", "both2") + .set(0, "val0") + .set(1, "val1"); + PageParameters right = new PageParameters().add("right", "right") + .add("both", "both1-r") + .add("both", "both2-r") + .set(1, "val1-r") + .set(2, "val2"); + left.mergeWith(right); + + assertEquals("val0", left.get(0).toString()); + assertEquals("val1-r", left.get(1).toString()); + assertEquals("val2", left.get(2).toString()); + assertEquals("left", left.get("left").toString()); + assertEquals("right", left.get("right").toString()); + assertEquals(2, left.getValues("both").size()); + assertEquals("both1-r", left.getValues("both").get(0).toString()); + assertEquals("both2-r", left.getValues("both").get(1).toString()); + } }
