2015-12-21 96 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