您可以嘗試創建一個實用程序服務來構建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>
這是你與範例中得到:
現在,您可以自定義這個例子中,以滿足您的代碼,如解析映射,而不是列表或字符串...
謝謝,但我解決我的問題與語言菜單的定製的裝飾。我也使用java類中的自定義參數製作一個url。你的解決方案比我的簡單。 – oscar