2013-12-20 58 views
0

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

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

而不是使用.property文件,所有本地化的文本来自我们的数据库,所以我实现我自己的MessageResourcesFactory的MessageResources类。问题在于,在我们的应用程序中,我们从Integer会话属性中获取用户语言,该属性名为“LANGUAGE”,而不是Struts缺省使用的Locale属性“org.apache.struts.action.LOCALE”

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

谢谢。

回答

1

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

我的建议:

  • 实现自己javax.servlet.http.HttpSessionAttributeListener其同步的LANGUAGE属性对应的Struts的locale属性
  • 或更改您设置LANGUAGE属性也设置了Struts代码会话属性
+0

我认为这是最适合的解决方案,因为它直接攻击问题,最终是同步两个会话属性。谢谢。 –

0

另一种解决方案将设置为过滤器ř将拦截LANGUAGE和executiong动作之前设置根据Struts的Locale

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> 
0

的解决方案是延长ActionServlet并覆盖doGetdoPost的方法,通过在process()之前将其放入请求来更改区域设置。像

String locale = "your_locale"; 
request.getSession().setAttribute(Globals.LOCALE_KEY, new Locale(locale));