春天& Thymeleaf:更改区域设置并保留在当前页面上

时间:2016-08-06 11:15:14

标签: spring spring-mvc url internationalization thymeleaf

我有一个传统的Spring4 / Thymeleaf i18n应用程序 我用经典的

轻松切换语言环境
org.springframework.web.servlet.i18n.LocaleChangeInterceptor

org.springframework.web.servlet.i18n.CookieLocaleResolver

切换时我总是发送到服务器 / home?lang = fr 。它工作正常。但我需要一个更复杂的行为。 我需要做的是在切换语言环境时保留当前页面

我找到了这个百里香片段的半工作解决方案:

th:with="currentUrl=(${#httpServletRequest.pathInfo + '?' + #strings.defaultString(#httpServletRequest.queryString, '')})

问题是我需要实现自己的许多角落案例:

  • 当已有任何查询参数
  • 如果有 lang = en 参数,
  • 等。

有人知道如何使用原生 Spring或Thymeleaf工具来管理此案例吗?或者我需要为Thymeleaf编写自己的处理器?

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是连接“requestURI”和“queryString”。 这种方法的缺点是,如果你在同一个链接上多次点击,那么参数就会反复添加。

解决方法是在添加参数

之前编写一个“清理”url的函数

有关代码示例,请查看以下问题:Thymeleaf: add parameter to current url

答案 1 :(得分:0)

我在我的项目中使用它&它工作正常。当语言环境发生变化时,我没有专门重定向到任何URL。

@Bean
public LocaleResolver localeResolver()
{
    Locale defaultLocale = new Locale( env.getProperty( Constants.DEFAULT_LOCALE ) );
    CookieLocaleResolver clr = new CookieLocaleResolver();
    clr.setDefaultLocale( defaultLocale );
    return clr;
}

@Bean
public LocaleChangeInterceptor localeChangeInterceptor()
{
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
    lci.setParamName( "lang" );
    return lci;
}