我需要一些有关以下问题的帮助。我们有一个现有的Web应用程序根本不使用框架(只是servlet),我们需要添加新的功能,但不是向web.xml
添加新的servlet,我们将添加Struts 1和Spring。 / p>
由于项目已经存在,我们必须配置Struts以便能够与现有的约定相处。其中之一就是本地化。
所有可本地化的文本都来自我们的数据库,而不是使用.property文件,所以我实现了自己的 MessageResourcesFactory 和 MessageResources 类。问题是在我们的应用程序中,我们从名为" LANGUAGE" 的Integer会话属性中获取用户语言,而不是来自Locale属性" org.apache。 struts.action.LOCALE" ,Struts默认使用。
问题是这个。如何告诉Struts从我的自定义Integer属性而不是stantard Locale属性中获取用户语言?
感谢。
答案 0 :(得分:1)
据我所知,没有直接的方法告诉Struts使用其他会话属性来使用语言环境。即使Struts可以执行此操作,您也需要在自定义整数和“真正的”Locale
对象之间实现映射。
我的建议:
javax.servlet.http.HttpSessionAttributeListener
,将 LANGUAGE 属性同步到相应的Struts区域设置属性答案 1 :(得分:0)
另一种解决方案是设置一个过滤器,它将拦截 LANGUAGE 并在执行操作之前设置相应的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>
答案 2 :(得分:0)
解决方案是扩展ActionServlet
并覆盖方法doGet
和doPost
,以通过在process()
之前将其置于请求中来更改区域设置。像
String locale = "your_locale";
request.getSession().setAttribute(Globals.LOCALE_KEY, new Locale(locale));