diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java
index 30b15bf6cf..45fb84102a 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/tags/UrlTag.java
@@ -295,6 +295,18 @@ public class UrlTag extends HtmlEscapingAwareTag implements ParamAware {
throw new JspException(ex);
}
}
+ else {
+ template = URL_TEMPLATE_DELIMITER_PREFIX + "/" + param.getName() + URL_TEMPLATE_DELIMITER_SUFFIX;
+ if (uri.contains(template)) {
+ usedParams.add(param.getName());
+ try {
+ uri = uri.replace(template, UriUtils.encodePathSegment(param.getValue(), encoding));
+ }
+ catch (UnsupportedEncodingException ex) {
+ throw new JspException(ex);
+ }
+ }
+ }
}
return uri;
}
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java
index a9d33ebd98..db5ee2cf29 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/UrlTagTests.java
@@ -431,6 +431,42 @@ public class UrlTagTests extends AbstractTagTests {
assertTrue(usedParams.contains("name"));
}
+ // SPR-11401
+
+ public void testReplaceUriTemplateParamsTemplateWithPathSegment()
+ throws JspException {
+ List params = new LinkedList();
+ Set usedParams = new HashSet();
+
+ Param param = new Param();
+ param.setName("name");
+ param.setValue("my/Id");
+ params.add(param);
+
+ String uri = tag.replaceUriTemplateParams("url/{/name}", params, usedParams);
+
+ assertEquals("url/my%2FId", uri);
+ assertEquals(1, usedParams.size());
+ assertTrue(usedParams.contains("name"));
+ }
+
+ public void testReplaceUriTemplateParamsTemplateWithPath()
+ throws JspException {
+ List params = new LinkedList();
+ Set usedParams = new HashSet();
+
+ Param param = new Param();
+ param.setName("name");
+ param.setValue("my/Id");
+ params.add(param);
+
+ String uri = tag.replaceUriTemplateParams("url/{name}", params, usedParams);
+
+ assertEquals("url/my/Id", uri);
+ assertEquals(1, usedParams.size());
+ assertTrue(usedParams.contains("name"));
+ }
+
public void testCreateUrlRemoteServer() throws JspException {
tag.setValue("http://www.springframework.org/");