Spring MVC 使用所有参数获取完整的当前URL thymeleaf

4xy9mtcn  于 2023-01-13  发布在  Spring
关注(0)|答案(2)|浏览(166)

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

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

tkclm6bt

tkclm6bt1#

您可以尝试创建一个实用程序服务来构建您的URL的params部分。该实用程序方法将从List获取输入并通过StringBuffer构建一个String。结果将是一个String,当您手动编写param时,它将被写为。现在您可以使用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";
    }

}

测试的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>

这是你从这个例子中得到的结果:

现在您可以自定义这个示例以适合您的代码,例如解析Map而不是List或String...

vfhzx4xs

vfhzx4xs2#

如果您正在寻找 *thymeleaf template only版本 *,您可以将${#request.getRequestURI()}${#request.getQueryString()}一起使用,并通过连接添加其他参数:

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

有关详细信息,请参见https://stackoverflow.com/a/75103428/2590616

相关问题