我已经编写了请求过滤器和区域设置解析器,用于从URL获取语言代码。 (例如:DOMAIN / en /,DOMAIN / cs /)
但是,我不知道如何以编程方式更改Thymeleaf用于其上下文相关URL(@ {/ css / main.css})的上下文路径。
例如,如果页面上带有地址" DOMAIN / en / test /"正在关注代码
isSelected
指向
<a th:href="@{/test2/}">TEST 2</a>
而不是
DOMAIN/test2/
我认为创建一些在转到Thymeleaf模板之前编辑URL的过滤器会很好,但我不知道如何。
你有任何想法如何解决它?
答案 0 :(得分:0)
一种解决方案是将URL放在消息资源文件中:
<a th:href="@{#{orders.details.localized_url}(id=${order.id})}">
如:http://www.thymeleaf.org/doc/articles/standardurlsyntax.html
中所述或者返回适当的模板视图,例如:
@RequestMapping("/localized/**")
public String getTemplateView(HttpServletRequest request) {
String path = request.getRequestURI();
//path = /localized/en/mypage
return mypage_en.html;// or relative location in the configured folder
}
我更喜欢第一个
答案 1 :(得分:0)
我找到了符合我期望的解决方案。
我只想在上下文路径(example.com/CONTEXT_PATH/CONTROLLER - &gt; example.com/CONTEXT_PATH/LANGUAGE_CODE/CONTROLLER)之后为Thymeleaf模板插入语言代码,所以我仍然可以使用Thymeleaf的网址表达式@ {/ controller}。
我有url过滤器,它会删除语言代码并将其添加到请求的属性中,因此我刚刚编辑了响应的encodeURL方法,它可以按我的意愿运行:
getServletContext().getRequestDispatcher(newUrl).forward(request, new HttpServletResponseWrapper(response) {
@Override
public String encodeURL(String url) {
String contextPath = getServletContext().getContextPath();
if (url.startsWith(contextPath))
url = new StringBuilder(url).insert(contextPath.length(), "/" + getLocale().getLanguage()).toString();
return super.encodeURL(url);
}
});
无论如何,谢谢你的回答! :)