2015-12-21 119 views
1

使用带弹簧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> 

但在一些意见,我有PARAMS在URL中。我如何添加参数? 我知道如何当我遇到的具体参数添加:

<a th:href="@{${currentUrl}(fooParam = ${fooValue}, lang='es_ES')}" th:if="__${#locale}__ != 'es_ES'" >Sp</a> 

但我知道,在所有视图中的所有参数既没有编号和名称。我如何获得当前网址的所有参数?

回答

0

您可以尝试创建一个实用程序服务来构建URL的params部分。该实用程序方法将从列表中获取输入,并通过StringBuffer构建一个字符串。结果将会是一个字符串,就像您手动编写参数一样。现在,您可以使用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> 

这是你与范例中得到:

enter image description here

现在,您可以自定义这个例子中,以满足您的代码,如解析映射,而不是列表或字符串...

+0

谢谢,但我解决我的问题与语言菜单的定制的装饰。我也使用java类中的自定义参数制作一个url。你的解决方案比我的简单。 – oscar