获取包含所有参数的完整当前 url thymeleaf

问题描述 投票:0回答:2

我正在使用 thymeleaf 和 spring mvc。我想添加一个语言参数来更改区域设置。我是这样做的:

<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的所有参数?

java html spring-mvc thymeleaf
2个回答
1
投票

如果您正在寻找 thymeleaf 仅模板版本,您可以将

${#request.getRequestURI()}
${#request.getQueryString()}
一起使用,并通过串联添加其他参数:

<a th:href="@{${url}}" th:with="url=${#request.getRequestURI()+'?'+#request.getQueryString()+'&foo=bar'}">Link</a>

0
投票

您可以尝试创建一个实用服务来构建 URL 的参数部分。该实用程序方法将从列表中获取输入并通过 StringBuffer 构建字符串。结果将是一个字符串,就像您手动编写参数时一样。现在,您可以使用 thymeleaf 中内置的预解析器语法来调用该实用程序并构建最终的 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";
    }

}

测试用Html模板:

<!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>

这就是您从示例中得到的结果:

enter image description here

您现在可以自定义此示例以适合您的代码,例如解析映射而不是列表或字符串...

© www.soinside.com 2019 - 2024. All rights reserved.