0

我需要一些帮助来解决以下问题。我们有一个现有的 web 应用程序,它根本不使用任何框架(只是 servlet),我们需要添加新的功能,但是web.xml我们将添加 Struts 1 和 Spring,而不是添加新的 servlet。

由于该项目已经存在,我们必须配置 Struts 以便能够与已有的约定相处。其中之一是本地化。

所有可本地化的文本都来自我们的数据库,而不是使用 .property 文件,因此我实现了自己的MessageResourcesFactoryMessageResources类。问题在于,在我们的应用程序中,我们从一个名为“LANGUAGE”的整数会话属性中获取用户语言,而不是从Struts 默认使用的区域设置属性“org.apache.struts.action.LOCALE”中获取用户语言。

问题是这样的。如何告诉 Struts 从我的自定义 Integer 属性而不是标准 Locale 属性中获取用户语言?

谢谢。

4

3 回答 3

1

据我所知,没有直接的方法可以告诉 Struts 使用另一个会话属性来使用语言环境。即使 Struts 可以做到这一点,您也需要实现自定义整数和“真实”Locale对象之间的映射。

我的建议:

  • 实现您自己的javax.servlet.http.HttpSessionAttributeListener同步LANGUAGE属性到相应的 Struts 语言环境属性
  • 或者更改设置LANGUAGE属性的代码以同时设置 Struts 会话属性
于 2013-12-20T16:04:43.783 回答
0

另一种解决方案是设置一个过滤器,该过滤器将拦截LANGUAGELocale并在执行操作之前设置相应的 Struts :

public class localeFilter implements Filter  
{  

    public void destroy()  
    {  

    }  

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception  
    {  
        // read the int LANGUAGE and set the Locale used by Struts
    }  

    public void init(FilterConfig filterConfig) throws ServletException  
    {  

    }  

}

并在 web.xml 中声明过滤器:

  <filter>  
    <filter-name>localeFilter</filter-name>  
    <filter-class>com.example.filters.MyFilter</filter-class>  
  </filter> 

  <filter-mapping>  
    <filter-name>localeFilter</filter-name>  
    <url-pattern>*.do</url-pattern>  
  </filter-mapping>  
于 2013-12-20T16:10:56.323 回答
0

解决方案是扩展ActionServlet和覆盖方法doGet,并doPost通过在process(). 像

String locale = "your_locale";
request.getSession().setAttribute(Globals.LOCALE_KEY, new Locale(locale));  
于 2013-12-20T16:34:51.950 回答