我设法让struts 2 i18n Interceptor工作来改变会话语言环境。如果我直接调用Action,它会起作用,例如:
https://localhost:8443/loadClientLogin.action?request_locale=fr
但是如果我使用UrlRewriteFilter从规则映射,它会调用该操作,但似乎跳过了18n拦截器,因为语言环境没有改变。
这是我为此操作编写的网址重写器规则:
<rule>
<from>^/client/login(\??)(.*)$</from>
<to type="forward">/loadClientLogin.action$1$2</to>
</rule>
这是我用来更改语言环境的网址:
https://localhost:8443/client/login?request_locale=fr
另一方面,如果我将规则的类型更改为“重定向”,则可以正常工作,但浏览器地址会显示“丑陋”的转发网址。
奇怪的是我用来管理用户会话的其他自定义拦截器总是被调用。
更新
我在我的Action中添加了一个日志跟踪,用于编写会话中的语言环境:
public String loadClientLogin() {
logger.debug("locale: " + ActionContext.getContext().getLocale());
return Action.SUCCESS;
}
当我直接调用Action时,日志会显示正确的区域设置代码:
locale: fr
但通过网址重写器,我得到了这个:
locale: [ljava.lang.string;@4d227ffb
任何建议都将非常感谢。