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 2012/08/07 10:59:37 UTC

git commit: WICKET-4686

Updated Branches:
  refs/heads/sandbox/WICKET-4686 [created] 8b4d9de39


WICKET-4686

Make it possible to use named mandatory and optional parameters in the url mounted with PackageMapper


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8b4d9de3
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8b4d9de3
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8b4d9de3

Branch: refs/heads/sandbox/WICKET-4686
Commit: 8b4d9de39eedeef10ff1ff0a383606b6b94785bb
Parents: f99a241
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Aug 7 11:58:10 2012 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Aug 7 11:58:10 2012 +0300

----------------------------------------------------------------------
 .../request/mapper/AbstractBookmarkableMapper.java |  230 +++++++++++++++
 .../core/request/mapper/BookmarkableMapper.java    |   29 +--
 .../wicket/core/request/mapper/MountedMapper.java  |  225 +--------------
 .../wicket/core/request/mapper/PackageMapper.java  |   49 ++--
 .../wicket/protocol/http/WebApplication.java       |    6 +-
 .../core/request/mapper/PackageMapperTest.java     |  104 +++++--
 .../wicket/request/mapper/mount/MountMapper.java   |    5 +-
 .../mapper/mount/UnmountedMapperAdapter.java       |   14 +-
 .../mount/UnmountedRequestHandlerAdapter.java      |   11 +-
 .../mapper/parameter/PageParametersEncoder.java    |    6 -
 10 files changed, 351 insertions(+), 328 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/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 86c64a6..bd920de 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
@@ -16,6 +16,9 @@
  */
 package org.apache.wicket.core.request.mapper;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
@@ -34,7 +37,9 @@ import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.mapper.info.ComponentInfo;
 import org.apache.wicket.request.mapper.info.PageComponentInfo;
 import org.apache.wicket.request.mapper.info.PageInfo;
+import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
 import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -133,11 +138,27 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 		}
 	}
 
+	private final List<MountPathSegment> pathSegments;
+
+	protected final String[] mountSegments;
+
+	protected final IPageParametersEncoder pageParametersEncoder;
+
 	/**
 	 * Construct.
 	 */
 	public AbstractBookmarkableMapper()
 	{
+		this("notUsed", new PageParametersEncoder());
+	}
+
+	public AbstractBookmarkableMapper(String mountPath, IPageParametersEncoder pageParametersEncoder)
+	{
+		Args.notEmpty(mountPath, "mountPath");
+
+		this.pageParametersEncoder = Args.notNull(pageParametersEncoder, "pageParametersEncoder");
+		mountSegments = getMountSegments(mountPath);
+		pathSegments = getPathSegments(mountSegments);
 	}
 
 	/**
@@ -428,4 +449,213 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper
 
 		return new PageInfo(pageId);
 	}
+
+	protected static class MountPathSegment
+	{
+		private int segmentIndex;
+		private String fixedPart;
+		private int minParameters;
+		private int optionalParameters;
+
+		public MountPathSegment(int segmentIndex)
+		{
+			this.segmentIndex = segmentIndex;
+		}
+
+		public void setFixedPart(String fixedPart)
+		{
+			this.fixedPart = fixedPart;
+		}
+
+		public void addRequiredParameter()
+		{
+			minParameters++;
+		}
+
+		public void addOptionalParameter()
+		{
+			optionalParameters++;
+		}
+
+		public int getSegmentIndex()
+		{
+			return segmentIndex;
+		}
+
+		public String getFixedPart()
+		{
+			return fixedPart;
+		}
+
+		public int getMinParameters()
+		{
+			return minParameters;
+		}
+
+		public int getOptionalParameters()
+		{
+			return optionalParameters;
+		}
+
+		public int getMaxParameters()
+		{
+			return getOptionalParameters() + getMinParameters();
+		}
+
+		public int getFixedPartSize()
+		{
+			return getFixedPart() == null ? 0 : 1;
+		}
+
+		@Override
+		public String toString()
+		{
+			return "(" + getSegmentIndex() + ") " + getMinParameters() + '-' + getMaxParameters() +
+					' ' + (getFixedPart() == null ? "(end)" : getFixedPart());
+		}
+	}
+
+	protected List<MountPathSegment> getPathSegments(String[] segments)
+	{
+		List<MountPathSegment> ret = new ArrayList<MountPathSegment>();
+		int segmentIndex = 0;
+		MountPathSegment curPathSegment = new MountPathSegment(segmentIndex);
+		ret.add(curPathSegment);
+		for (String curSegment : segments)
+		{
+			if (isFixedSegment(curSegment))
+			{
+				curPathSegment.setFixedPart(curSegment);
+				curPathSegment = new MountPathSegment(segmentIndex + 1);
+				ret.add(curPathSegment);
+			}
+			else if (getPlaceholder(curSegment) != null)
+			{
+				curPathSegment.addRequiredParameter();
+			}
+			else
+			{
+				curPathSegment.addOptionalParameter();
+			}
+			segmentIndex++;
+		}
+		return ret;
+	}
+
+	protected boolean isFixedSegment(String segment)
+	{
+		return getOptionalPlaceholder(segment) == null && getPlaceholder(segment) == null;
+	}
+
+
+	/**
+	 * Extracts the PageParameters from URL if there are any
+	 */
+	protected PageParameters extractPageParameters(Request request, Url url)
+	{
+		int[] matchedParameters = getMatchedSegmentSizes(url);
+		int total = 0;
+		for (int curMatchSize : matchedParameters)
+			total += curMatchSize;
+		PageParameters pageParameters = extractPageParameters(request, total, pageParametersEncoder);
+
+		int skippedParameters = 0;
+		for (int pathSegmentIndex = 0; pathSegmentIndex < pathSegments.size(); pathSegmentIndex++)
+		{
+			MountPathSegment curPathSegment = pathSegments.get(pathSegmentIndex);
+			int matchSize = matchedParameters[pathSegmentIndex] - curPathSegment.getFixedPartSize();
+			int optionalParameterMatch = matchSize - curPathSegment.getMinParameters();
+			for (int matchSegment = 0; matchSegment < matchSize; matchSegment++)
+			{
+				if (pageParameters == null)
+				{
+					pageParameters = new PageParameters();
+				}
+
+				int curSegmentIndex = matchSegment + curPathSegment.getSegmentIndex();
+				String curSegment = mountSegments[curSegmentIndex];
+				String placeholder = getPlaceholder(curSegment);
+				String optionalPlaceholder = getOptionalPlaceholder(curSegment);
+				// extract the parameter from URL
+				if (placeholder != null)
+				{
+					pageParameters.add(placeholder,
+							url.getSegments().get(curSegmentIndex - skippedParameters));
+				}
+				else if (optionalPlaceholder != null && optionalParameterMatch > 0)
+				{
+					pageParameters.add(optionalPlaceholder,
+							url.getSegments().get(curSegmentIndex - skippedParameters));
+					optionalParameterMatch--;
+				}
+			}
+			skippedParameters += curPathSegment.getMaxParameters() - matchSize;
+		}
+		return pageParameters;
+	}
+
+	protected int[] getMatchedSegmentSizes(Url url)
+	{
+		int[] ret = new int[pathSegments.size()];
+		int segmentIndex = 0;
+		int pathSegmentIndex = 0;
+		for (MountPathSegment curPathSegment : pathSegments.subList(0, pathSegments.size() - 1))
+		{
+			boolean foundFixedPart = false;
+			segmentIndex += curPathSegment.getMinParameters();
+			int max = Math.min(curPathSegment.getOptionalParameters() + 1,
+					url.getSegments().size() - segmentIndex);
+
+			for (int count = max - 1; count >= 0; count--)
+			{
+				if (url.getSegments()
+						.get(segmentIndex + count)
+						.equals(curPathSegment.getFixedPart()))
+				{
+					foundFixedPart = true;
+					segmentIndex += count + 1;
+					ret[pathSegmentIndex] = count + curPathSegment.getMinParameters() + 1;
+					break;
+				}
+			}
+			if (!foundFixedPart)
+				return null;
+			pathSegmentIndex++;
+		}
+		MountPathSegment lastSegment = pathSegments.get(pathSegments.size() - 1);
+		segmentIndex += lastSegment.getMinParameters();
+		if (segmentIndex > url.getSegments().size())
+			return null;
+		ret[pathSegmentIndex] = Math.min(lastSegment.getMaxParameters(), url.getSegments().size() -
+				segmentIndex + lastSegment.getMinParameters());
+		return ret;
+	}
+
+	protected void setPlaceholders(PageParameters parameters, Url url)
+	{
+		int dropped = 0;
+		for (int i = 0; i < mountSegments.length; ++i)
+		{
+			String placeholder = getPlaceholder(mountSegments[i]);
+			String optionalPlaceholder = getOptionalPlaceholder(mountSegments[i]);
+			if (placeholder != null)
+			{
+				url.getSegments().set(i - dropped, parameters.get(placeholder).toString(""));
+				parameters.remove(placeholder);
+			}
+			else if (optionalPlaceholder != null)
+			{
+				if (parameters.getNamedKeys().contains(optionalPlaceholder))
+				{
+					url.getSegments().set(i - dropped, parameters.get(optionalPlaceholder).toString(""));
+					parameters.remove(optionalPlaceholder);
+				}
+				else
+				{
+					url.getSegments().remove(i - dropped);
+					dropped++;
+				}
+			}
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/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 f8c7ffe..f3a8dac 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
@@ -24,7 +24,6 @@ import org.apache.wicket.request.mapper.info.PageComponentInfo;
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
-import org.apache.wicket.util.lang.Args;
 
 /**
  * Decodes and encodes the following URLs:
@@ -47,31 +46,24 @@ import org.apache.wicket.util.lang.Args;
  */
 public class BookmarkableMapper extends AbstractBookmarkableMapper
 {
-	private final IPageParametersEncoder pageParametersEncoder;
-
 	/**
 	 * Construct.
-	 *
-	 * @param pageParametersEncoder
 	 */
-	public BookmarkableMapper(IPageParametersEncoder pageParametersEncoder)
+	public BookmarkableMapper()
 	{
-		Args.notNull(pageParametersEncoder, "pageParametersEncoder");
-
-		this.pageParametersEncoder = pageParametersEncoder;
+		this(new PageParametersEncoder());
 	}
 
 	/**
 	 * Construct.
+	 *
+	 * @param pageParametersEncoder
 	 */
-	public BookmarkableMapper()
+	public BookmarkableMapper(IPageParametersEncoder pageParametersEncoder)
 	{
-		this(new PageParametersEncoder());
+		super("notUsed", pageParametersEncoder);
 	}
 
-	/**
-	 * @see AbstractBookmarkableMapper#buildUrl(AbstractBookmarkableMapper.UrlInfo)
-	 */
 	@Override
 	protected Url buildUrl(UrlInfo info)
 	{
@@ -85,9 +77,6 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
 		return encodePageParameters(url, info.getPageParameters(), pageParametersEncoder);
 	}
 
-	/**
-	 * @see AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
-	 */
 	@Override
 	protected UrlInfo parseRequest(Request request)
 	{
@@ -122,18 +111,12 @@ public class BookmarkableMapper extends AbstractBookmarkableMapper
 		return null;
 	}
 
-	/**
-	 * @see AbstractBookmarkableMapper#pageMustHaveBeenCreatedBookmarkable()
-	 */
 	@Override
 	protected boolean pageMustHaveBeenCreatedBookmarkable()
 	{
 		return true;
 	}
 
-	/**
-	 * @see AbstractBookmarkableMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
 	@Override
 	public int getCompatibilityScore(Request request)
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
index a7a5be8..37aada6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
@@ -16,9 +16,6 @@
  */
 package org.apache.wicket.core.request.mapper;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.wicket.Application;
 import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
@@ -66,76 +63,6 @@ import org.apache.wicket.util.string.Strings;
  */
 public class MountedMapper extends AbstractBookmarkableMapper
 {
-	private final IPageParametersEncoder pageParametersEncoder;
-
-	private static class MountPathSegment
-	{
-		private int segmentIndex;
-		private String fixedPart;
-		private int minParameters;
-		private int optionalParameters;
-
-		public MountPathSegment(int segmentIndex)
-		{
-			this.segmentIndex = segmentIndex;
-		}
-
-		public void setFixedPart(String fixedPart)
-		{
-			this.fixedPart = fixedPart;
-		}
-
-		public void addRequiredParameter()
-		{
-			minParameters++;
-		}
-
-		public void addOptionalParameter()
-		{
-			optionalParameters++;
-		}
-
-		public int getSegmentIndex()
-		{
-			return segmentIndex;
-		}
-
-		public String getFixedPart()
-		{
-			return fixedPart;
-		}
-
-		public int getMinParameters()
-		{
-			return minParameters;
-		}
-
-		public int getOptionalParameters()
-		{
-			return optionalParameters;
-		}
-
-		public int getMaxParameters()
-		{
-			return getOptionalParameters() + getMinParameters();
-		}
-
-		public int getFixedPartSize()
-		{
-			return getFixedPart() == null ? 0 : 1;
-		}
-
-		@Override
-		public String toString()
-		{
-			return "(" + getSegmentIndex() + ") " + getMinParameters() + "-" + getMaxParameters() +
-				" " + (getFixedPart() == null ? "(end)" : getFixedPart());
-		}
-	}
-
-	private final List<MountPathSegment> pathSegments;
-	private final String[] mountSegments;
-
 	/** bookmarkable page class. */
 	private final ClassProvider<? extends IRequestablePage> pageClassProvider;
 
@@ -186,51 +113,13 @@ public class MountedMapper extends AbstractBookmarkableMapper
 		ClassProvider<? extends IRequestablePage> pageClassProvider,
 		IPageParametersEncoder pageParametersEncoder)
 	{
-		Args.notEmpty(mountPath, "mountPath");
+		super(mountPath, pageParametersEncoder);
+
 		Args.notNull(pageClassProvider, "pageClassProvider");
-		Args.notNull(pageParametersEncoder, "pageParametersEncoder");
 
-		this.pageParametersEncoder = pageParametersEncoder;
 		this.pageClassProvider = pageClassProvider;
-		mountSegments = getMountSegments(mountPath);
-		pathSegments = getPathSegments(mountSegments);
 	}
 
-	private List<MountPathSegment> getPathSegments(String[] segments)
-	{
-		List<MountPathSegment> ret = new ArrayList<MountPathSegment>();
-		int segmentIndex = 0;
-		MountPathSegment curPathSegment = new MountPathSegment(segmentIndex);
-		ret.add(curPathSegment);
-		for (String curSegment : segments)
-		{
-			if (isFixedSegment(curSegment))
-			{
-				curPathSegment.setFixedPart(curSegment);
-				curPathSegment = new MountPathSegment(segmentIndex + 1);
-				ret.add(curPathSegment);
-			}
-			else if (getPlaceholder(curSegment) != null)
-			{
-				curPathSegment.addRequiredParameter();
-			}
-			else
-			{
-				curPathSegment.addOptionalParameter();
-			}
-			segmentIndex++;
-		}
-		return ret;
-	}
-
-	private boolean isFixedSegment(String segment)
-	{
-		return getOptionalPlaceholder(segment) == null && getPlaceholder(segment) == null;
-	}
-
-	/**
-	 * @see AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
-	 */
 	@Override
 	protected UrlInfo parseRequest(Request request)
 	{
@@ -259,52 +148,6 @@ public class MountedMapper extends AbstractBookmarkableMapper
 		}
 	}
 
-	/*
-	 * extract the PageParameters from URL if there are any
-	 */
-	private PageParameters extractPageParameters(Request request, Url url)
-	{
-		int[] matchedParameters = getMatchedSegmentSizes(url);
-		int total = 0;
-		for (int curMatchSize : matchedParameters)
-			total += curMatchSize;
-		PageParameters pageParameters = extractPageParameters(request, total, pageParametersEncoder);
-
-		int skippedParameters = 0;
-		for (int pathSegmentIndex = 0; pathSegmentIndex < pathSegments.size(); pathSegmentIndex++)
-		{
-			MountPathSegment curPathSegment = pathSegments.get(pathSegmentIndex);
-			int matchSize = matchedParameters[pathSegmentIndex] - curPathSegment.getFixedPartSize();
-			int optionalParameterMatch = matchSize - curPathSegment.getMinParameters();
-			for (int matchSegment = 0; matchSegment < matchSize; matchSegment++)
-			{
-				if (pageParameters == null)
-				{
-					pageParameters = new PageParameters();
-				}
-
-				int curSegmentIndex = matchSegment + curPathSegment.getSegmentIndex();
-				String curSegment = mountSegments[curSegmentIndex];
-				String placeholder = getPlaceholder(curSegment);
-				String optionalPlaceholder = getOptionalPlaceholder(curSegment);
-				// extract the parameter from URL
-				if (placeholder != null)
-				{
-					pageParameters.add(placeholder,
-						url.getSegments().get(curSegmentIndex - skippedParameters));
-				}
-				else if (optionalPlaceholder != null && optionalParameterMatch > 0)
-				{
-					pageParameters.add(optionalPlaceholder,
-						url.getSegments().get(curSegmentIndex - skippedParameters));
-					optionalParameterMatch--;
-				}
-			}
-			skippedParameters += curPathSegment.getMaxParameters() - matchSize;
-		}
-		return pageParameters;
-	}
-
 	@Override
 	protected boolean urlStartsWith(Url url, String... segments)
 	{
@@ -318,43 +161,6 @@ public class MountedMapper extends AbstractBookmarkableMapper
 		}
 	}
 
-	private int[] getMatchedSegmentSizes(Url url)
-	{
-		int[] ret = new int[pathSegments.size()];
-		int segmentIndex = 0;
-		int pathSegmentIndex = 0;
-		for (MountPathSegment curPathSegment : pathSegments.subList(0, pathSegments.size() - 1))
-		{
-			boolean foundFixedPart = false;
-			segmentIndex += curPathSegment.getMinParameters();
-			int max = Math.min(curPathSegment.getOptionalParameters() + 1,
-				url.getSegments().size() - segmentIndex);
-
-			for (int count = max - 1; count >= 0; count--)
-			{
-				if (url.getSegments()
-					.get(segmentIndex + count)
-					.equals(curPathSegment.getFixedPart()))
-				{
-					foundFixedPart = true;
-					segmentIndex += count + 1;
-					ret[pathSegmentIndex] = count + curPathSegment.getMinParameters() + 1;
-					break;
-				}
-			}
-			if (!foundFixedPart)
-				return null;
-			pathSegmentIndex++;
-		}
-		MountPathSegment lastSegment = pathSegments.get(pathSegments.size() - 1);
-		segmentIndex += lastSegment.getMinParameters();
-		if (segmentIndex > url.getSegments().size())
-			return null;
-		ret[pathSegmentIndex] = Math.min(lastSegment.getMaxParameters(), url.getSegments().size() -
-			segmentIndex + lastSegment.getMinParameters());
-		return ret;
-	}
-
 	protected PageParameters newPageParameters()
 	{
 		return new PageParameters();
@@ -415,32 +221,7 @@ public class MountedMapper extends AbstractBookmarkableMapper
 		encodePageComponentInfo(url, info.getPageComponentInfo());
 
 		PageParameters copy = new PageParameters(info.getPageParameters());
-
-		int dropped = 0;
-		for (int i = 0; i < mountSegments.length; ++i)
-		{
-			String placeholder = getPlaceholder(mountSegments[i]);
-			String optionalPlaceholder = getOptionalPlaceholder(mountSegments[i]);
-			if (placeholder != null)
-			{
-				url.getSegments().set(i - dropped, copy.get(placeholder).toString(""));
-				copy.remove(placeholder);
-			}
-			else if (optionalPlaceholder != null)
-			{
-				if (copy.getNamedKeys().contains(optionalPlaceholder))
-				{
-					url.getSegments().set(i - dropped, copy.get(optionalPlaceholder).toString(""));
-					copy.remove(optionalPlaceholder);
-				}
-				else
-				{
-					url.getSegments().remove(i - dropped);
-					dropped++;
-				}
-			}
-		}
-
+		setPlaceholders(copy, url);
 		return encodePageParameters(url, copy, pageParametersEncoder);
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
index 54729e9..2e5d3fe 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/PackageMapper.java
@@ -66,38 +66,32 @@ public class PackageMapper extends AbstractBookmarkableMapper
 	 */
 	private final PackageName packageName;
 
-	/** the encoder used to encode/decode the page parameters */
-	private final IPageParametersEncoder pageParametersEncoder;
-
 	/**
-	 * Construct.
+	 * Constructor.
 	 *
 	 * @param packageName
 	 */
-	public PackageMapper(final PackageName packageName)
+	public PackageMapper(String mountPath, final PackageName packageName)
 	{
-		this(packageName, new PageParametersEncoder());
+		this(mountPath, packageName, new PageParametersEncoder());
 	}
 
 	/**
-	 * Construct.
+	 * Constructor.
 	 *
 	 * @param packageName
 	 * @param pageParametersEncoder
 	 */
-	public PackageMapper(final PackageName packageName,
+	public PackageMapper(String mountPath, final PackageName packageName,
 		final IPageParametersEncoder pageParametersEncoder)
 	{
+		super(mountPath, pageParametersEncoder);
+
 		Args.notNull(packageName, "packageName");
-		Args.notNull(pageParametersEncoder, "pageParametersEncoder");
 
 		this.packageName = packageName;
-		this.pageParametersEncoder = pageParametersEncoder;
 	}
 
-	/**
-	 * @see org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper#buildUrl(UrlInfo)
-	 */
 	@Override
 	protected Url buildUrl(UrlInfo info)
 	{
@@ -106,6 +100,10 @@ public class PackageMapper extends AbstractBookmarkableMapper
 		if (pageClassPackageName.equals(packageName))
 		{
 			Url url = new Url();
+			for (String s : mountSegments)
+			{
+				url.getSegments().add(s);
+			}
 
 			String fullyQualifiedClassName = pageClass.getName();
 			String packageRelativeClassName = fullyQualifiedClassName;
@@ -117,26 +115,27 @@ public class PackageMapper extends AbstractBookmarkableMapper
 			packageRelativeClassName = transformForUrl(packageRelativeClassName);
 			url.getSegments().add(packageRelativeClassName);
 			encodePageComponentInfo(url, info.getPageComponentInfo());
-			return encodePageParameters(url, info.getPageParameters(), pageParametersEncoder);
+
+			PageParameters copy = new PageParameters(info.getPageParameters());
+			setPlaceholders(copy, url);
+
+			return encodePageParameters(url, copy, pageParametersEncoder);
 		}
 
 		return null;
 	}
 
-	/**
-	 * @see org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper#parseRequest(org.apache.wicket.request.Request)
-	 */
 	@Override
 	protected UrlInfo parseRequest(Request request)
 	{
 		Url url = request.getUrl();
-		if (url.getSegments().size() >= 1)
+		if (url.getSegments().size() > mountSegments.length)
 		{
 			// try to extract page and component information from URL
 			PageComponentInfo info = getPageComponentInfo(url);
 
 			// load the page class
-			String className = url.getSegments().get(0);
+			String className = url.getSegments().get(mountSegments.length);
 
 			if (isValidClassName(className) == false)
 			{
@@ -151,8 +150,10 @@ public class PackageMapper extends AbstractBookmarkableMapper
 				IRequestablePage.class.isAssignableFrom(pageClass))
 			{
 				// extract the PageParameters from URL if there are any
-				PageParameters pageParameters = extractPageParameters(request, 1,
-					pageParametersEncoder);
+				Url urlWithoutPageSegment = new Url(url);
+				urlWithoutPageSegment.getSegments().remove(mountSegments.length);
+				Request requestWithoutPageSegment = request.cloneWithUrl(urlWithoutPageSegment);
+				PageParameters pageParameters = extractPageParameters(requestWithoutPageSegment, urlWithoutPageSegment);
 
 				return new UrlInfo(info, pageClass, pageParameters);
 			}
@@ -210,18 +211,12 @@ public class PackageMapper extends AbstractBookmarkableMapper
 		return className;
 	}
 
-	/**
-	 * @see org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper#pageMustHaveBeenCreatedBookmarkable()
-	 */
 	@Override
 	protected boolean pageMustHaveBeenCreatedBookmarkable()
 	{
 		return true;
 	}
 
-	/**
-	 * @see org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
 	@Override
 	public int getCompatibilityScore(Request request)
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
index 42ab5d1..384184d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
@@ -62,7 +62,6 @@ import org.apache.wicket.request.handler.render.PageRenderer;
 import org.apache.wicket.request.handler.render.WebPageRenderer;
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.WebResponse;
-import org.apache.wicket.request.mapper.mount.MountMapper;
 import org.apache.wicket.request.resource.CssResourceReference;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -366,9 +365,8 @@ public abstract class WebApplication extends Application
 	 */
 	public final <P extends Page> void mountPackage(final String path, final Class<P> pageClass)
 	{
-		PackageMapper packageMapper = new PackageMapper(PackageName.forClass(pageClass));
-		MountMapper mountMapper = new MountMapper(path, packageMapper);
-		mount(mountMapper);
+		PackageMapper packageMapper = new PackageMapper(path, PackageName.forClass(pageClass));
+		mount(packageMapper);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/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 a342bd5..9aafdac 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
@@ -40,10 +40,11 @@ import org.junit.Test;
  */
 public class PackageMapperTest extends AbstractMapperTest
 {
+	private static final String MOUNT_PATH = "mount/path";
 
 	private static final String ALIAS = "alias";
 
-	private final PackageMapper encoder = new PackageMapper(PackageName.forClass(MockPage.class))
+	private final PackageMapper encoder = new PackageMapper(MOUNT_PATH, PackageName.forClass(MockPage.class))
 	{
 		@Override
 		protected IMapperContext getContext()
@@ -54,7 +55,7 @@ public class PackageMapperTest extends AbstractMapperTest
 
 	private static final String PAGE_CLASS_NAME = MockPage.class.getSimpleName();
 
-	private final PackageMapper aliasEncoder = new PackageMapper(
+	private final PackageMapper aliasEncoder = new PackageMapper(MOUNT_PATH,
 		PackageName.forClass(MockPage.class))
 	{
 		@Override
@@ -94,13 +95,22 @@ public class PackageMapperTest extends AbstractMapperTest
 		}
 	};
 
+	private final PackageMapper namedParametersEncoder = new PackageMapper(MOUNT_PATH + "/${foo}/${bar}", PackageName.forClass(MockPage.class))
+	{
+		@Override
+		protected IMapperContext getContext()
+		{
+			return context;
+		}
+	};
+
 	/**
 	 *
 	 */
 	@Test
 	public void decode1()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME);
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME);
 		IRequestHandler handler = encoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof RenderPageRequestHandler);
@@ -116,7 +126,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decode2()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "/indexed1?a=b&b=c");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/indexed1?a=b&b=c");
 		IRequestHandler handler = encoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof RenderPageRequestHandler);
@@ -138,7 +148,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decode3()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "?15");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "?15");
 		IRequestHandler handler = encoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof RenderPageRequestHandler);
@@ -152,7 +162,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decode4()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c");
 		IRequestHandler handler = encoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof RenderPageRequestHandler);
@@ -171,7 +181,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decode5()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "?15-ILinkListener-foo-bar");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "?15-ILinkListener-foo-bar");
 		IRequestHandler handler = encoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof ListenerInterfaceRequestHandler);
@@ -192,7 +202,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decode6()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
 		IRequestHandler handler = encoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof ListenerInterfaceRequestHandler);
@@ -216,7 +226,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decode7()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "?15-ILinkListener.4-foo-bar");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "?15-ILinkListener.4-foo-bar");
 		IRequestHandler handler = encoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof ListenerInterfaceRequestHandler);
@@ -237,7 +247,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decode8()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
 
 		context.setNextPageRenderCount(5);
 
@@ -256,7 +266,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test(expected = StalePageException.class)
 	public void decode9()
 	{
-		Url url = Url.parse(PAGE_CLASS_NAME + "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
+		Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
 
 		context.setNextPageRenderCount(6);
 
@@ -267,6 +277,33 @@ public class PackageMapperTest extends AbstractMapperTest
 	}
 
 	/**
+	 *
+	 */
+	@Test
+	public void decodeNamedParameters()
+	{
+		Url url = Url.parse(MOUNT_PATH + "/fooValue/barValue/" + PAGE_CLASS_NAME + "/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
+		IRequestHandler handler = namedParametersEncoder.mapRequest(getRequest(url));
+
+		assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+		ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+		IRequestablePage page = h.getPage();
+		checkPage(page, 15);
+
+		assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+		assertEquals("foo:bar", h.getComponent().getPageRelativePath());
+
+		PageParameters p = h.getPageParameters();
+		assertEquals(2, p.getIndexedCount());
+
+		assertEquals(4, p.getNamedKeys().size());
+		assertEquals("fooValue", p.get("foo").toString());
+		assertEquals("barValue", p.get("bar").toString());
+
+	}
+
+	/**
 	 * WICKET-2993
 	 */
 	@Test
@@ -289,7 +326,7 @@ public class PackageMapperTest extends AbstractMapperTest
 		provider.setPageSource(context);
 		IRequestHandler handler = new BookmarkablePageRequestHandler(provider);
 		Url url = encoder.mapHandler(handler);
-		assertEquals(PAGE_CLASS_NAME, url.toString());
+		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME, url.toString());
 	}
 
 	/**
@@ -307,7 +344,7 @@ public class PackageMapperTest extends AbstractMapperTest
 		provider.setPageSource(context);
 		IRequestHandler handler = new BookmarkablePageRequestHandler(provider);
 		Url url = encoder.mapHandler(handler);
-		assertEquals(PAGE_CLASS_NAME + "/i1/i2?a=b&b=c", url.toString());
+		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?a=b&b=c", url.toString());
 	}
 
 	/**
@@ -327,7 +364,7 @@ public class PackageMapperTest extends AbstractMapperTest
 		IRequestHandler handler = new BookmarkablePageRequestHandler(provider);
 		Url url = encoder.mapHandler(handler);
 
-		assertEquals(PAGE_CLASS_NAME + "/i1/i2?a=b&b=c", url.toString());
+		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?a=b&b=c", url.toString());
 	}
 
 	/**
@@ -347,7 +384,7 @@ public class PackageMapperTest extends AbstractMapperTest
 		IRequestHandler handler = new RenderPageRequestHandler(provider);
 		Url url = encoder.mapHandler(handler);
 
-		assertEquals(PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c", url.toString());
+		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c", url.toString());
 	}
 
 	/**
@@ -398,7 +435,7 @@ public class PackageMapperTest extends AbstractMapperTest
 
 		Url url = encoder.mapHandler(handler);
 
-		assertEquals(PAGE_CLASS_NAME + "/i1/i2?15-0.ILinkListener-foo-bar&a=b&b=c", url.toString());
+		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15-0.ILinkListener-foo-bar&a=b&b=c", url.toString());
 	}
 
 	/**
@@ -425,7 +462,7 @@ public class PackageMapperTest extends AbstractMapperTest
 
 		Url url = encoder.mapHandler(handler);
 
-		assertEquals(PAGE_CLASS_NAME + "/i1/i2?15-0.ILinkListener.4-foo-bar&a=b&b=c",
+		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME + "/i1/i2?15-0.ILinkListener.4-foo-bar&a=b&b=c",
 			url.toString());
 	}
 
@@ -445,11 +482,32 @@ public class PackageMapperTest extends AbstractMapperTest
 
 		Url url = encoder.mapHandler(handler);
 
-		assertEquals(PAGE_CLASS_NAME, url.toString());
+		assertEquals(MOUNT_PATH + '/' + PAGE_CLASS_NAME, url.toString());
+	}
+
+	/**
+	 *
+	 */
+	@Test
+	public void encodeNamedPageParameters()
+	{
+		MockPage page = new MockPage(15);
+		page.setBookmarkable(true);
+		page.setCreatedBookmarkable(true);
+		page.setPageStateless(true);
+
+		IPageProvider provider = new PageProvider(page);
+		page.getPageParameters().set("foo", "fooValue");
+		page.getPageParameters().set("bar", "barValue");
+		IRequestHandler handler = new RenderPageRequestHandler(provider);
+
+		Url url = namedParametersEncoder.mapHandler(handler);
+
+		assertEquals(MOUNT_PATH + "/fooValue/barValue/" + PAGE_CLASS_NAME, url.toString());
 	}
 
 
-	private final PackageMapper innerClassEncoder = new PackageMapper(
+	private final PackageMapper innerClassEncoder = new PackageMapper(MOUNT_PATH,
 		PackageName.forClass(OuterPage.class))
 	{
 		@Override
@@ -481,7 +539,7 @@ public class PackageMapperTest extends AbstractMapperTest
 
 		Url url = innerClassEncoder.mapHandler(handler);
 
-		assertEquals("PackageMapperTest$OuterPage$InnerPage", url.toString());
+		assertEquals(MOUNT_PATH + '/' + "PackageMapperTest$OuterPage$InnerPage", url.toString());
 	}
 
 	/**
@@ -490,7 +548,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decodeInnerClass()
 	{
-		Url url = Url.parse("PackageMapperTest$OuterPage$InnerPage");
+		Url url = Url.parse(MOUNT_PATH + '/' + "PackageMapperTest$OuterPage$InnerPage");
 		IRequestHandler handler = innerClassEncoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof RenderPageRequestHandler);
@@ -516,7 +574,7 @@ public class PackageMapperTest extends AbstractMapperTest
 
 		Url url = aliasEncoder.mapHandler(handler);
 
-		assertEquals(ALIAS, url.toString());
+		assertEquals(MOUNT_PATH + '/' + ALIAS, url.toString());
 	}
 
 	/**
@@ -525,7 +583,7 @@ public class PackageMapperTest extends AbstractMapperTest
 	@Test
 	public void decodeAlias()
 	{
-		Url url = Url.parse(ALIAS + "?15");
+		Url url = Url.parse(MOUNT_PATH + '/' + ALIAS + "?15");
 		IRequestHandler handler = aliasEncoder.mapRequest(getRequest(url));
 
 		assertTrue(handler instanceof RenderPageRequestHandler);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
index 2bc619e..7fe6818 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/MountMapper.java
@@ -88,7 +88,8 @@ public class MountMapper extends AbstractMapper
 	{
 		if (urlStartsWith(request.getUrl(), mountSegments))
 		{
-			return mountSegments.length + mapper.getCompatibilityScore(dismountRequest(request));
+			Request dismountedRequest = dismountRequest(request);
+			return mountSegments.length + mapper.getCompatibilityScore(dismountedRequest);
 		}
 		else
 		{
@@ -118,7 +119,7 @@ public class MountMapper extends AbstractMapper
 	{
 		final Url url = request.getUrl();
 
-		if ((url.getSegments().size() >= mountSegments.length) && urlStartsWith(url, mountSegments))
+		if (urlStartsWith(url, mountSegments))
 		{
 			MountParameters params = new MountParameters();
 			for (int i = 0; i < mountSegments.length; i++)

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
index 397495c..7268c5f 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedMapperAdapter.java
@@ -20,6 +20,7 @@ import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.util.lang.Args;
 
 /**
  * Adapts a {@link IRequestMapper} to be used as a {@link IMountedRequestMapper}
@@ -36,25 +37,20 @@ class UnmountedMapperAdapter implements IMountedRequestMapper
 	 * Construct.
 	 * 
 	 * @param mapper
+	 *      the request mapper to adapt
 	 */
 	public UnmountedMapperAdapter(final IRequestMapper mapper)
 	{
 		super();
-		this.mapper = mapper;
+		this.mapper = Args.notNull(mapper, "mapper");
 	}
 
-	/**
-	 * @see org.apache.wicket.request.mapper.mount.IMountedRequestMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
 	@Override
 	public int getCompatibilityScore(final Request request)
 	{
 		return mapper.getCompatibilityScore(request);
 	}
 
-	/**
-	 * @see org.apache.wicket.request.mapper.mount.IMountedRequestMapper#mapHandler(org.apache.org.apache.wicket.request.IRequestHandler)
-	 */
 	@Override
 	public Mount mapHandler(final IRequestHandler requestHandler)
 	{
@@ -66,10 +62,6 @@ class UnmountedMapperAdapter implements IMountedRequestMapper
 		return null;
 	}
 
-	/**
-	 * @see org.apache.wicket.request.mapper.mount.IMountedRequestMapper#mapRequest(org.apache.wicket.request.Request,
-	 *      org.apache.wicket.request.mapper.mount.MountParameters)
-	 */
 	@Override
 	public IRequestHandler mapRequest(final Request request, final MountParameters mountParams)
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
index 932edbc..9a77e84 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/mount/UnmountedRequestHandlerAdapter.java
@@ -35,24 +35,19 @@ class UnmountedRequestHandlerAdapter implements IMountedRequestMapper
 	 * Construct.
 	 * 
 	 * @param handler
+	 *      the request handler to adapt
 	 */
 	public UnmountedRequestHandlerAdapter(final IRequestHandler handler)
 	{
 		this.handler = handler;
 	}
 
-	/**
-	 * @see org.apache.wicket.request.mapper.mount.IMountedRequestMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
 	@Override
 	public int getCompatibilityScore(final Request request)
 	{
 		return 0;
 	}
 
-	/**
-	 * @see org.apache.wicket.request.mapper.mount.IMountedRequestMapper#mapHandler(org.apache.org.apache.wicket.request.IRequestHandler)
-	 */
 	@Override
 	public Mount mapHandler(final IRequestHandler requestHandler)
 	{
@@ -63,10 +58,6 @@ class UnmountedRequestHandlerAdapter implements IMountedRequestMapper
 		return null;
 	}
 
-	/**
-	 * @see org.apache.wicket.request.mapper.mount.IMountedRequestMapper#mapRequest(org.apache.wicket.request.Request,
-	 *      org.apache.wicket.request.mapper.mount.MountParameters)
-	 */
 	@Override
 	public IRequestHandler mapRequest(final Request request, final MountParameters mountParams)
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/8b4d9de3/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
index 8139460..d848668 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
@@ -33,9 +33,6 @@ public class PageParametersEncoder implements IPageParametersEncoder
 	{
 	}
 
-	/**
-	 * @see IPageParametersEncoder#decodePageParameters(org.apache.wicket.request.Url)
-	 */
 	@Override
 	public PageParameters decodePageParameters(final Url url)
 	{
@@ -56,9 +53,6 @@ public class PageParametersEncoder implements IPageParametersEncoder
 		return parameters.isEmpty() ? null : parameters;
 	}
 
-	/**
-	 * @see org.apache.wicket.request.mapper.parameter.IPageParametersEncoder#encodePageParameters(org.apache.wicket.request.mapper.parameter.PageParameters)
-	 */
 	@Override
 	public Url encodePageParameters(final PageParameters pageParameters)
 	{