获取包含所有参数的完整当前 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的主要内容,如果未能解决你的问题,请参考以下文章

使用jQuery获取完整的URL,包括问号后的参数?

获取 WKWebView 的当前完整 URL

PHP中获取当前页面的完整URL

.net和js 获取当前url各种属性

AngularJS如何修改URL中的参数

使用 JavaScript 获取当前完整的 URL 并将其与 jQuery 一起使用