【问题标题】:I18n redirection issue in struts2 web applicationstruts2 Web 应用程序中的 I18n 重定向问题
【发布时间】:2015-07-24 13:59:53
【问题描述】:

在我的应用程序中,区域设置由用户从登录页面动态选择,我将选定的区域设置保存在 Cookie 中。

如果我的 Web 应用程序发生重定向,我将面临与 I18n 相关的问题。

当我通过附加当前语言环境通过 URL 重定向页面时,我的应用程序语言保持与所选语言相同(即在这种情况下工作正常),但是当我通过 struts.xml 文件中定义的 struts 重定向重定向到下一页时,语言环境更改为默认值(在我的情况下为英语)。

例如:

在 - <result name="success" type="redirect"> 的情况下,区域设置更改为默认设置。

如果我删除type=redirect,那么它可以正常工作,但我的表单将被提交两次。

那么有没有办法在运行时将语言环境附加到 struts 重定向?

这是我的拦截器堆栈之一:

<interceptor-stack name="sessionValidateStack">
    <interceptor-ref name="auditTrail"></interceptor-ref>
    <interceptor-ref name="sessionCheck"></interceptor-ref>
    <interceptor-ref name="service">
        <param name="code">DG</param>
        <param name="interfaceType">WEB</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="expHandler"></interceptor-ref>
</interceptor-stack>

【问题讨论】:

  • 你在使用修改过的拦截器栈吗?您是否尝试过 redirectAction 结果类型?
  • 是的!我正在使用修改过的拦截器堆栈,但我没有使用 redirectAction 结果类型。
  • 显示拦截器堆栈。也可以尝试使用 redirectAction 结果类型,因为您应该使用它而不是 redirect 来重定向到某些操作。
  • 我已经在问题中添加了堆栈。我也会尝试使用 type="redirectAction"
  • 默认情况下,S2 i18n 拦截器将语言环境存储在会话中,并且由于您有一些 sessionCheck 拦截器,因此您可能正在使用您的代码将其从会话中删除。

标签: java jsp struts2 internationalization locale


【解决方案1】:

在您的参数中添加request_locale=&lt;your_language_key&gt;

【讨论】:

  • 我已经在参数中添加了 request_locale 但是在结果 type=redirect 时区域设置被重置,即更改为默认值。
  • 将 request_locale 保留为变量,保留 getter 和 setter 并设置值并尝试
【解决方案2】:

在动作结果类型中使用redirect-action而不是redirect,因为在重定向动作的情况下,控制跳转到不同的动作(在相同或其他包中)。

redirect 和redirect type 结果类型的区别请参考link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多