我已经实现了一个自定义ActionMapper,它从URI中获取区域设置(URI本身,而不是请求参数)。从ActionMapper.getMapping()中,如何设置当前操作的语言环境?
以下是我考虑过的一些想法:
有没有简单的方法来实现这个目标?
答案 0 :(得分:1)
设置参数时可以使用提供的I18nInterceptor: request_only_locale
而不是 request_localerequest_only_locale仅存储请求的区域设置,不会触及会话。
干杯, 基督教
答案 1 :(得分:0)
我确实最终设置了一个参数“locale”,并重写了使用它的i18n拦截器。
从Struts 2.1.1开始,ActionMapping中的参数与请求参数保持独立。 actionMappingParams拦截器获取这些参数并将它们应用于操作对象。但是,我希望我的i18n拦截器使用“locale”参数而不将其传递给动作,以下是我的操作方式:
private static final String LOCALE_PARAMETER = "locale";
public String intercept(ActionInvocation invocation) throws Exception {
ActionMapping mapping = (ActionMapping) invocation.getInvocationContext()
.get(ServletActionContext.ACTION_MAPPING);
Map params = mapping.getParams();
Locale locale = (Locale) params.remove(LOCALE_PARAMETER);
if(locale != null) {
ActionContext.getContext().setLocale(locale);
}
return invocation.invoke();
}
这个自定义i18n拦截器必须在拦截器堆栈中的actionMappingParams之前。