获取包含所有参数的完整当前 url thymeleaf
Posted
技术标签:
【中文标题】获取包含所有参数的完整当前 url thymeleaf【英文标题】:Get full current url thymeleaf with all parameters 【发布时间】:2016-03-27 10:47:44 【问题描述】:我正在使用带有 spring mvc 的 thymeleaf。我想添加一个语言参数来更改语言环境。我是这样做的:
<a th:href="@$currentUrl(lang='es_ES')" th:if="__$#locale__ != 'es_ES'" >Sp</a>
<a th:href="@$currentUrl(lang='en_US')" th:if="__$#locale__ != 'en_US'" >Eng</a>
但在某些视图中,我在 URL 中有参数。如何添加参数? 遇到具体参数就知道怎么加了:
<a th:href="@$currentUrl(fooParam = $fooValue, lang='es_ES')" th:if="__$#locale__ != 'es_ES'" >Sp</a>
但我不知道所有视图中所有参数的数量和名称。如何获取当前url的所有参数?
【问题讨论】:
【参考方案1】:您可以尝试创建一个实用服务来构建 URL 的参数部分。该实用程序方法将从 List 中获取输入并通过 StringBuffer 构建一个 String。结果将是一个字符串,就像您手动编写参数时一样。现在您可以使用 thymeleaf 中内置的 Pre-Parser 语法来调用该实用程序并构建您的最终 url。 这里是例子:
实用服务
@Service("thymeleafUtilsService")
public class ThymeleafUtilsService
public String buildMultiParamPartUrl(List<String> paramNames)
StringBuffer sb = new StringBuffer(0);
for ( String paramName : paramNames )
if ( sb.length() >= 0 )
sb.append(",");
sb.append(paramName).append("=$").append(paramName).append("");
return sb.toString();
用于测试的控制器
@Controller("multiParamLinkController")
@RequestMapping(value = "/multiParamLink")
public class MultiParamLinkController
@RequestMapping(value =
"/",
"" , method = RequestMethod.GET)
public String testMultiParamsGenerator(Model model)
List<String> paramNames = new ArrayList<>();
paramNames.add("fooValue");
paramNames.add("barValue");
paramNames.add("lang");
model.addAttribute("fooValue", "foo");
model.addAttribute("barValue", "bar");
model.addAttribute("lang", "US_us");
model.addAttribute("paramNames", paramNames);
return "multiParamLink/multiParamLink.html";
用于测试的 HtmlTemplate:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<a th:href="@$currentUrl(__$@thymeleafUtilsService.buildMultiParamPartUrl(paramNames)__)">myLink</a>
<h1>Result</h1>
<pre th:inline="text">[[@$currentUrl(__$@thymeleafUtilsService.buildMultiParamPartUrl(paramNames)__)]]</pre>
</body>
</html>
这就是您通过示例得到的结果:
您现在可以自定义此示例以适合您的代码,例如解析 Map 而不是 List 或 String...
【讨论】:
谢谢,但我用语言菜单的自定义装饰器解决了我的问题。我也在 java 类中创建了一个带有自定义参数的 url。你的解决方案比我的简单。以上是关于获取包含所有参数的完整当前 url thymeleaf的主要内容,如果未能解决你的问题,请参考以下文章