Struts2国际化实战

来源:互联网 发布:航天三院310所 知乎 编辑:程序博客网 时间:2024/06/06 03:36

网上的教程还挺多,但是我还是尝试了很久才成功。

其实挺简单的Struts2提供了较好的支持。如果只是照着网上的教程做,你很可能会发现各种无效或者null异常或者其他异常什么的。
这里面一个原因是我对Struts确实不熟悉,虽然也用过,但是那只是用过,根本没有深度。

一个简单的Struts2国际化小功能给了我一个教训:首先你至少得知道大体原理,当然能够深入理解是最好的,一点都不理解其运作原理及流程,那么照着网上的教程做就会遇到很多障碍,原因各异,而你也不知道为什么不行,你只能换一个教程,做更多的尝试直到可行。当然这和网上教程的质量也有关系。我自己总结了几点:1、不讲原理的教程不是好教程。2、原理讲的很细但缺少简洁形象的过程概括的教程不是好教程。3、讲了很多原理却没有实践的教程不是好教程。4、实践中没有讲明自己的必要运行环境的教程不是好教程。

下面我就说一下我最后怎么成功的吧,并不是教程。

Struts2国际化简单原理(这里不是其内部实现原理,而是其相关类过程):

Struts2的国际化由Locale类的getLocale()和setLocale()方法来完成动作的,中间应该会通过一些ActionContext或者SessionContext之类的来做,此处略过,涉及到LocaleProvider的一个接口,但是实际上ActionSupport类已经把这些都做进去集成好了,只需要你的Action类集继承了ActionSupport类然后在action请求时含有request_locale参数即可如:
,所以使用Struts2实现国际化要做的事情并不复杂。

环境:

struts2,基本的SSH框架,jdk应该不限版本,tomcat应该不限版本,本人使用Eclipse开发。

实践:

1、创建一个Action类:

import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Service;import com.opensymphony.xwork2.ActionSupport;@Service("changeLocaleAction")@Scope("prototype")public class ChangeLocaleAction extends ActionSupport  {    private static final long serialVersionUID = 1L;    public String changeLocale() {        return SUCCESS;    }}

2、 在struts.xml中配置:login.jsp为当前页面。(在struts标签的package标签内添加)

<action name="changeLocale" class="changeLocaleAction" method="changeLocale">    <result name="success">login.jsp</result></action>

3、 在struts.xml同级目录下创建ApplicationResources_zh_CN.properties
和ApplicationResources_en_US.properties和ApplicationResources.properties(默认)文件(命名规则为:文件名语言国家.properties)。

4、相应在struts.xml中的struts标签下添加:(此处对应的是默认的语言和资源文件)

<constant name="struts.custom.i18n.resources" value="ApplicationResources"/><constant name="struts.locale" value="zh_CN" /><constant name="struts.i18n.encoding" value="UTF-8" />

5、当前页面中如login.jsp中添加:

<s:url action="changeLocale" var="lan_en">    <s:param name="request_locale" value="'en_US'"></s:param></s:url><a href="<s:property value="#lan_en"/>">English</a>

<s:url action="changeLocale" var="lan_cn">    <s:param name="request_locale" value="'zh_CN'"></s:param></s:url> <a href="<s:property value="#lan_cn"/>">简体中文</a>

6、保存所有文件运行即可。
注意:如果资源是图片等,则只需要定义为其相对路径即可,如:
pictureLogin=images/login_zh_CN.gif与pictureLogin=images/login_en_US.gif
引用时则为src="<s:text name='pictureLogin'/>"

原创粉丝点击