[关闭]
@liayun 2016-10-03T13:57:17.000000Z 字数 5151 阅读 1557

Struts2框架进阶(四)

Struts2框架学习


这是Struts2框架进阶四。废话不多说,直接进入正文。

国际化

Struts2框架的国际化,大概在实际开发中用到的不多,虽说用不到,但是我们还是要弄明白这个知识点的。
若我们要是在实际项目中用到国际化,那就要准备资源文件,资源文件的命名格式如下:

其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家。如:

提示:对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。命令的使用方式如下:

native2ascii 源文件.properties 目标文件.properties

国际化有三个不同范围的资源文件:

下面我们来一一详解。

配置国际化全局资源文件与输出国际化信息

我们先搭建好Struts2的开发环境。准备工作做好之后,我们就来配置国际化全局资源文件并输出国际化信息。
现在准备两个资源文件:

将这两个资源文件放在类路径下(即src目录下)。若要使用上面的两个资源文件,那么在struts.xml中须使用常量加载全局资源文件,如下:

  1. <constant name="struts.custom.i18n.resources" value="itcast" />

itcast为资源文件的基本名。
这样,struts.xml配置文件的内容就应为:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <constant name="struts.custom.i18n.resources" value="itcast" />
  7. </struts>

最后我们要在WebRoot根目录下创建项目首页——index.jsp,而且我们若想在index.jsp页面中输出国际化信息,则须使用到<s:text name="" />标签,如:

  1. <s:text name="user" />

name为属性文件中的key。
这样,index.jsp页面的内容为:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/struts-tags" prefix="s"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>国际化</title>
  9. </head>
  10. <body>
  11. <s:text name="welcome"></s:text>
  12. </body>
  13. </html>

测试效果如下:
记得插入.GIF图片

输出带占位符的国际化信息

我们将itcast_zh_CN.properties资源文件的内容修改为:

  1. welcome={0},欢迎来到天门市{1}

将itcast_en_US.properties资源文件的内容修改为:

  1. {0},welcom to tianmen {1}

我们若想在index.jsp页面中输出带占位符的国际化信息,index.jsp页面的内容须修改为:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/struts-tags" prefix="s"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>国际化</title>
  9. </head>
  10. <body>
  11. <s:text name="welcome">
  12. <s:param>liayun</s:param>
  13. <s:param>玩耍</s:param>
  14. </s:text>
  15. </body>
  16. </html>

测试效果如下:
记得插入.GIF图片

配置国际化包范围资源文件与输出国际化信息

在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这时候我们可以针对不同模块、不同的action来组织国际化文件。方法如下:
在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源文件。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找(即从全局资源文件中查找)。
我们在src目录下新建一个java包:cn.itcast.action,然后在该包下加入以下两个资源文件:

接下来,我们还要在该包下创建一个Action——PersonManageAction.java。在Action类中,可以继承ActionSupport,使用getText()方法,该方法的第一个参数用于指定属性文件中的key

  1. public class PersonManageAction extends ActionSupport {
  2. @Override
  3. public String execute() throws Exception {
  4. ActionContext.getContext().put("message", this.getText("welcome", new String[]{"liayun", "玩耍"}));
  5. return "message";
  6. }
  7. }

提示:在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。
紧接着,我们在struts.xml配置文件中配置该action。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <constant name="struts.custom.i18n.resources" value="itcast" />
  7. <package name="person" namespace="/person" extends="struts-default">
  8. <action name="manage" class="cn.itcast.action.PersonManageAction">
  9. <result name="message">/WEB-INF/page/message.jsp</result>
  10. </action>
  11. </package>
  12. </struts>

顺其自然地,我们还要在WEB-INF/page/目录下创建出message.jsp页面来。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>结果</title>
  8. </head>
  9. <body>
  10. ${message }
  11. </body>
  12. </html>

测试结果如下:
记得插入.GIF图片

配置国际化Action范围资源文件与输出国际化信息

我们也可以为某个action单独指定资源文件,方法如下:
在Action类所在的路径下,放置ActionClassName_language_country.properties资源文件,ActionClassName为action类的简单名称。
当查找指定key的消息时,系统会先从ActionClassName_language_country.properties资源文件查找,如果没有找到对应的key,然后沿着当前包往上查找基本名为package的资源文件,一直找到最顶层包。如果还没有找到对应的key,最后会从常量struts.custom.i18n.resources指定的资源文件中寻找(即从全局资源文件中查找)。
我们在src目录下的cn.itcast.action包中再加入以下两个资源文件:

一切都不必改动,现在就来测试,结果如下:
记得插入.GIF图片

在JSP页面中直接访问某个资源文件

我们亦可使用<s:i18n>标签指定直接从某个特定的资源文件中取数据。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注