Repository: wicket Updated Branches: refs/heads/master 32af2c8cc -> e64f4de91
WICKET-5903 Regression in mount resolution when using optional parameters Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e64f4de9 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e64f4de9 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e64f4de9 Branch: refs/heads/master Commit: e64f4de91a32179c0641ac23b57d556bd12ca5ce Parents: 32af2c8 Author: Andrea Del Bene <â[email protected]â> Authored: Mon May 11 17:47:41 2015 +0200 Committer: Andrea Del Bene <â[email protected]â> Committed: Mon May 11 17:47:41 2015 +0200 ---------------------------------------------------------------------- .../wicket/request/mapper/AbstractMapper.java | 46 +++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/e64f4de9/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java index 83e7810..44c7947 100644 --- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java +++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/AbstractMapper.java @@ -100,29 +100,43 @@ public abstract class AbstractMapper implements IRequestMapper { return false; } - else + + List<String> urlSegments = url.getSegments(); + + for (int i = 0; i < segments.length; ++i) { - List<String> urlSegments = url.getSegments(); - if (urlSegments.size() < segments.length) + if (!segments[i].equals(safeSegmentGetter(urlSegments, i , "")) && + (getPlaceholder(segments[i]) == null && + getOptionalPlaceholder(segments[i]) == null)) { return false; } - else - { - for (int i = 0; i < segments.length; ++i) - { - if ((segments[i].equals(urlSegments.get(i)) == false) && - (getPlaceholder(segments[i]) == null && - getOptionalPlaceholder(segments[i]) == null)) - { - return false; - } - } - } } + return true; } - + + /** + * Utility method to safely get an element from a list of String. + * If the specified index is bigger than the size of the list + * the default value is returned. + * + * @param segments + * @param index + * @param defaultValue + * @return the element at the specified position or the default value if the list size is smaller. + * + */ + protected String safeSegmentGetter(List<String> segments, int index, String defaultValue) + { + if (index < segments.size()) + { + return segments.get(index); + } + + return defaultValue; + } + /** * Extracts {@link PageParameters} from the URL using the given {@link IPageParametersEncoder} . *
