您的位置:首页 > 编程语言 > Java开发

Struts2国际化实战

2017-08-21 13:27 267 查看
网上的教程还挺多,但是我还是尝试了很久才成功。

其实挺简单的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'/>"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: