From 426b77b83405b1b4778a96e5dc7075f553d79211 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 6 May 2014 19:41:17 -0400 Subject: [PATCH] Support path segment URI var expansion in UrlTag Before this change UrlTag expanded URI vars and encoded them using UriUtils.encodePath. This change makes it possible to expand using UriUtils.encodePathSegment, which means a "/" is encoded as "%2F". To expand with path segment semantics, prefix the URI var name "/": Issue: SPR-11401 --- .../web/servlet/tags/UrlTag.java | 12 +++++++ .../web/servlet/tags/UrlTagTests.java | 36 +++++++++++++++++++ 2 files changed, 48 insertions(+) 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 30b15bf6cfe9..45fb84102a5e 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 @@ protected String replaceUriTemplateParams(String uri, List params, Set 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/");