我们的应用程序使用 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/