java - 在 Spring AbstractRoutingDataSource 中访问 Struts2 语言环境

标签 java spring struts2

我们的应用程序使用 Struts2 Internalization 和 Spring AbstractRoutingDataSource 进行动态数据库更改。更改语言,需要选择对应的语言数据库。

因此,下面的代码使用 Spring RoutingDataSource 进行动态数据库选择。

public class RoutingDataSource extends AbstractRoutingDataSource {
    protected Object determineCurrentLookupKey() {
        return LanguageContextHolder.getLanguagetype();
    }
}

Spring RoutingDataSource 工作正常。

我的问题是如何在更改时设置区域设置。由于它存储在 Struts2 中,因此我无法在 Spring 中访问它。

我发现 Spring MVC org.springframework.context.i18n.LocaleContextHolder 可以做到这一点,但由于我们使用的是 Struts2,我该如何执行上述操作?

最佳答案

Struts2 使用默认键 WW_TRANS_I18N_LOCALE 将当前区域设置存储在 session 中。要访问 RoutingDataSource 内的 session ,请使用 ActionContext.getContext().getSession() 方法。

// ...

if (ActionContext.getContext() != null) {
  Map<String, Object> session = ActionContext.getContext().getSession();

  if (session != null && session.containsKey(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE)) {
    Locale locale = (Locale) session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE);
  }
}

// ...

关于java - 在 Spring AbstractRoutingDataSource 中访问 Struts2 语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479715/

相关文章:

java - 类路径中的属性未更新

java - 类中的访问方法

java - 我可以在 View 层中找到 spring mvc Controller 的 URL 吗?

java - Spring Data Rest 多对多树投影映射

java - 没有配置的数据库库/ORM 映射器

java - 尝试将 java 连接到 mysql 时出现 MySQLSyntaxErrorException

java - Spring MVC 中的验证

jakarta-ee - struts2 junit 2.3.12 插件 - 无法在 struts2 junit4 中编写成功测试

java - 在 Struts2 中验证整数值?

java - 如何使用 <s :checkboxlist/> tag? 从 List<MyObject> 生成复选框