《基于JavaEE的电子商务网站建设》课件第7章.ppt

上传人(卖家):momomo 文档编号:7862578 上传时间:2024-08-28 格式:PPT 页数:210 大小:1.51MB
下载 相关 举报
《基于JavaEE的电子商务网站建设》课件第7章.ppt_第1页
第1页 / 共210页
《基于JavaEE的电子商务网站建设》课件第7章.ppt_第2页
第2页 / 共210页
《基于JavaEE的电子商务网站建设》课件第7章.ppt_第3页
第3页 / 共210页
《基于JavaEE的电子商务网站建设》课件第7章.ppt_第4页
第4页 / 共210页
《基于JavaEE的电子商务网站建设》课件第7章.ppt_第5页
第5页 / 共210页
点击查看更多>>
资源描述

1、第7章Struts2拦截器、国际化及文件操作第 章Struts2 拦截器、国际化及文件操作7.1 Struts2的拦截器的拦截器7.2 Struts2的国际化的国际化 7.3 文件上传下载文件上传下载 第7章Struts2拦截器、国际化及文件操作在任何目录中新建ch07文件夹,然后将ch05所在的目录下的所有文件夹和文件都复制到ch07中。然后修改ch07目录下两个文件的内容:(1)在文件.propject中修改ch05为ch07,代码如下:ch07(2)在文件.mymetadata中修改ch05为ch07,有三处需要修改,代码如下:第7章Struts2拦截器、国际化及文件操作7.1 Stru

2、ts2的拦截器的拦截器7.1.1 开发执行安全验证的拦截器开发执行安全验证的拦截器在第5章的例子中,当我们访问isUMAction时,如果是管理员,则会进入manager.jsp页面,如果是普通用户,则进入user.jsp页面。而如果这两个页面的实际Action已为人所知,也就是说直接访问http:/localhost/ch07/user.action,则也会出现如图7-1所示的页面。第7章Struts2拦截器、国际化及文件操作图7-1 直接访问user.action第7章Struts2拦截器、国际化及文件操作为了让任何进入这个地址的访问者都要通过身份验证而不去修改Action代码,可以通过设

3、置拦截器使得系统自动判断是否为登录用户,如果未登录,则转入登录页面,如果已登录,则继续执行action中的业务逻辑。在Struts2中编写拦截器类时,必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口定义了三个方法:第7章Struts2拦截器、国际化及文件操作 void init():该方法在拦截器实例创建之后、intercept()方法被调用之前调用,用于初始化拦截器所需的资源,该方法只执行一次。void destroy():该方法在拦截器实例被销毁之前调用,用于释放在init()中分配的资源,该方法也只执行一次。第7章Stru

4、ts2拦截器、国际化及文件操作 String intercept(ActionInvocation invocation)throws Exception:该方法在Action执行之前被调用,拦截器为Action提供的附加功能在该方法中实现。利用invocation参数,可以获取action执行的状态。在intercept()方法中,如果要继续执行后续部分(包括余下的应用与Action的拦截器、Action和Result),可以调用invocation.invoke()。如要终止后续的执行,可以返回一个结果码,框架将根据这个结果码来呈现对应的结果视图。第7章Struts2拦截器、国际化及文件操

5、作Struts2中提供了一个抽象类com.opensymphony.xwork2.interceptor.AbstractInterceptor来简化拦截器的开发。它实现了Interceptor接口,并给出了init()和destroy()方法的空实现,因此只要重写抽象的intercept()方法就可以。第7章Struts2拦截器、国际化及文件操作【步骤1】编写拦截器类。由于是安全验证,那么一般通过登录成功后设置的session值来进行判断,所以要先查看前面的LoginAction.java中的login()方法,查找session的变量名为session_name:request.getSe

6、ssion().setAttribute(session_name,getUsername();新建拦截器类com.interceptor.AuthInterceptor.java,继承抽象类AbstractInterceptor.java,如图7-2所示。第7章Struts2拦截器、国际化及文件操作图7-2 新建拦截器类第7章Struts2拦截器、国际化及文件操作AuthInterceptor.java代码如下:package com.interceptor;import java.util.Map;import com.opensymphony.xwork2.Action;import c

7、om.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class AuthInterceptor extends AbstractInterceptor 第7章Struts2拦截器、国际化及文件操作 public String intercept(ActionInvocation invocation)throws Exception Map map=invocation.getInvocationContext().getSes

8、sion();if(map.get(session_name)=null)return Action.LOGIN;else long start=System.currentTimeMillis();/invocation.invoke()判断是否有下一个拦截器,如果没有,则进入Action,如果有,则进入下一个拦截器第7章Struts2拦截器、国际化及文件操作 String result=invocation.invoke();long executeTime=System.currentTimeMillis()-start;System.out.println(“Action的执行花费的毫

9、秒数是:+executeTime);return result;第7章Struts2拦截器、国际化及文件操作这是一个非常简单的拦截器类,用于安全验证。在invocation.invoke()调用的前后,计算输出Action执行花费的时间,添加自己的逻辑代码。以上代码如果验证成功,则继续执行后续部分,调用invocation.invoke()方法;如果没有登录,则终止后续执行,返回结果码Action.LOGIN,系统会根据这个结果码返回视图。第7章Struts2拦截器、国际化及文件操作【步骤2】配置struts.xml文件。以上的拦截器类AuthInterceptor.java要在某一个acti

10、on中起作用,Struts2提供的方式就是在struts.xml中进行配置。在以上的拦截器类定义了一个返回结果码Action.LOGIN,其配置方式见下文的代码。下面是修改和增加的struts.xml代码:第7章Struts2拦截器、国际化及文件操作 /login.jsp第7章Struts2拦截器、国际化及文件操作/省略其它action配置 /manager.jsp 第7章Struts2拦截器、国际化及文件操作 /user.jsp 第7章Struts2拦截器、国际化及文件操作下面对以上四个位置进行简单解释:处配置表示把拦截器类AuthInterceptor.java设置为名为auth的拦截器。

11、处配置表示返回结果码Action.LOGIN对应的全局变量,将重定向到login.jsp页面。处配置表示对于manager.action请求,先执行拦截器auth的拦截内容。处配置表示Struts2对提供的默认拦截器。第7章Struts2拦截器、国际化及文件操作【步骤3】运行程序。重启Tomcat,直接访问http:/localhost/ch07/user.action,运行结果如图7-3所示,证明拦截器auth在起作用,使得user.action的访问重定位到Action.LOGIN定义的login.jsp文件中,输入用户名和密码登录后,进入如图7-4所示的页面。在这次登录过程中,只要不重启

12、Tomcat、不退出登录或不重开浏览器(这三种情况都能让session失去值),再访问http:/localhost/ch07/user.action时,都会直接出现如图7-4所示的页面,这说明拦截器验证成功,直接执行action。第7章Struts2拦截器、国际化及文件操作 图7-3 拦截器拦截 第7章Struts2拦截器、国际化及文件操作图7-4 拦截器通过 第7章Struts2拦截器、国际化及文件操作7.1.2 拦截器配置详解拦截器配置详解1.一般拦截器配置在struts.xml中配置拦截器时,一般先在interceptors元素中使用interceptor元素定义拦截器,然后在acti

13、on元素中使用interceptor-ref元素指定引用的拦截器,如7.1.1节中的配置和就是如此。interceptor元素常用的属性如表7-1所示。第7章Struts2拦截器、国际化及文件操作第7章Struts2拦截器、国际化及文件操作如果一个action定义了多个拦截器,那么将按照action引用拦截器的顺序执行,也就是将在之前执行。细心的读者应该发现,和的配置组合不仅在user action中使用,在manager action中也使用,而且定义的顺序都一致。第7章Struts2拦截器、国际化及文件操作对于这种多个拦截器定义在一个action中或多个action使用相同的拦截器组合的情

14、况,Struts2提供了更简单的方式,就是使用拦截器栈来组合多个拦截器,然后在action中直接引用拦截器栈即可,而拦截器按照它们在拦截器栈中定义的顺序执行。以上的配置可以修改为以下代码:第7章Struts2拦截器、国际化及文件操作 第7章Struts2拦截器、国际化及文件操作/省略其它action配置 /manager.jsp /user.jsp 第7章Struts2拦截器、国际化及文件操作2.默认拦截器defaultStack拦截器defaultStack是Struts2定义的默认拦截器,它配置的拦截器栈在Struts2核心包(struts2-core-2.0.14.jar)的struts

15、-default.xml中,对于多数Web应用程序都是适用的。如果有特殊的需求,可以自由组合struts-default.xml中定义的拦截器和拦截器栈。第7章Struts2拦截器、国际化及文件操作 第7章Struts2拦截器、国际化及文件操作 dojo.*input,back,cancel,browse 第7章Struts2拦截器、国际化及文件操作 input,back,cancel,browse /省略其它 第7章Struts2拦截器、国际化及文件操作这个默认的拦截器栈组合了多个拦截器,它们的顺序都是精心设计的,因此一般Web程序的需求它都能满足。只要定义的package 的包继承自str

16、uts-default包,这个包中所有action默认的拦截器引用的都是拦截器栈defaultStack。从struts-default.xml的配置代码中可以看到,设置默认拦截器的标签是default-interceptor-ref,因此我们可以通过重定义这个标签来改变默认拦截器栈。第7章Struts2拦截器、国际化及文件操作比如6.4.1节中的user action和manager action都使用验证拦截器加默认拦截器,那么我们可以把authstack拦截器栈设置成默认拦截器,则在user action和manager action中都不用再定义拦截器,在运行action的时候会自动调

17、用这个重定义过的默认拦截器,代码如下:第7章Struts2拦截器、国际化及文件操作 第7章Struts2拦截器、国际化及文件操作/省略其它action配置 /manager.jsp /user.jsp 第7章Struts2拦截器、国际化及文件操作3.默认拦截器失效另外还有一种情况,比如我们把放入registerAcion的配置中,那么会出现什么呢?首先出现要求登录的界面,说明执行拦截器auth,但当登录后再运行register.jsp(如图7-5所示)时,表单提交后将不会出现action验证,如用户名和密码位数不够,年龄和生日数据类型不符等,而直接进入成功页面,页面中没有把表单填入数据传过来,

18、运行结果如图7-6所示。第7章Struts2拦截器、国际化及文件操作图7-5 错误注册页面 第7章Struts2拦截器、国际化及文件操作图7-6 拦截器无作为 第7章Struts2拦截器、国际化及文件操作完整的配置如下:/register.jsp /registerok.jsp 第7章Struts2拦截器、国际化及文件操作4.其它默认拦截器在以上的拦截器栈defaultStack中调用了许多拦截器,下面按拦截器defaultStack的顺序简单陈述一些常用的拦截器。拦截器exception:异常处理拦截器。拦截器servletConfig:为Action注入Servlet相关的对象。拦截器i1

19、8n:支持国际化。第7章Struts2拦截器、国际化及文件操作 拦截器fileUpload:处理文件上传。拦截器params:负责解析请求中的参数,并赋值给action中对应的属性。拦截器conversionError:将类型转换错误添加到Action的字段错误中。拦截器validation:负责表单字段的验证。拦截器workflow:负责执行action的validate()。第7章Struts2拦截器、国际化及文件操作7.1.3 方法过滤拦截器方法过滤拦截器Struts2还提供了一个可以对action定义的不同方法进行按需拦截的拦截器抽象基类:com.opensymphony.xwork2

20、.interceptor.MethodFilterInterceptor它可以指定要拦截或不拦截的逻辑方法。以下以simpleRegisterAction.action的操作为例进行说明。第7章Struts2拦截器、国际化及文件操作【步骤1】新建拦截器类。建立文件com.interceptor.AuthInterceptor1.java,继承MethodFilterInterceptor类,完成方法doInterceptor(),方法中定义的拦截内容与AuthInterceptor.java一样。package com.interceptor;import java.util.Map;impo

21、rt com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionInvocation;importcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor;第7章Struts2拦截器、国际化及文件操作public class AuthInterceptor1 extends MethodFilterInterceptor protected String doIntercept(ActionInvocation invocation)throws Exce

22、ption Map map=invocation.getInvocationContext().getSession();if(map.get(session_name)=null)return Action.LOGIN;else 第7章Struts2拦截器、国际化及文件操作 long start=System.currentTimeMillis();String result=invocation.invoke();long executeTime=System.currentTimeMillis()-start;System.out.println(Action的执行花费的毫秒数是:+ex

23、ecuteTime);return result;第7章Struts2拦截器、国际化及文件操作【步骤2】配置拦截器类。配置方法与一般拦截器类似,但MethodFilterInterceptor通过指定included/excluded方法列表选择拦截或排除的方法,一般可设置两个参数:excludeMethods要排除的方法;includeMethods要拦截的方法。以下为配置的源代码:第7章Struts2拦截器、国际化及文件操作 /省略其它拦截器配置/省略其它action配置第7章Struts2拦截器、国际化及文件操作/register_simple.jsp /registerok.jsp e

24、xecute 第7章Struts2拦截器、国际化及文件操作在设置拦截器或排除方法时,如果有多个方法,则以逗号(,)分隔;如果includeMethods和excludeMethods二者同时配置了某个方法,则优先级高的为includeMethods,就是凡是配置了包含拦截的一定要拦截。就像下面的代码,虽然配置了排除simple方法,但也配置了拦截simple方法,所以一定要拦截simple方法。simple,execute/paramsimple第7章Struts2拦截器、国际化及文件操作7.2 Struts2的国际化的国际化国际化(Internationalization)是指同样功能的系统

25、在不同的国家或地区,能按照当地的语言习惯显示字符。如一些跨国企业一般在其网站上都会有中文版、英文版、日文版等可以自由选择的版本,但显示的内容是一致的,只是用不同的语言呈现给用户。国际化的英文单词以I开头,以N结尾,中间共18个字母,所以又被称为I18N。第7章Struts2拦截器、国际化及文件操作7.2.1 国际化资源文件国际化资源文件在前面的章节中,我们在struts.xml中设定了这个值,代码如下:而且也建立了对应的文件message.properties,则在工程ch07中,此文件就是全局国际化资源文件。加载了这个文件后,Struts2就可以在所有需要国际化的文件中取出对应的值。第7章S

26、truts2拦截器、国际化及文件操作1.Locale的指定Struts2国际化要把当前应用的Locale和系统中对应的资源文件匹配来实现,而Locale一般由语言和国家的国际标准规范来定位。文件的存放位置和message.properties一样,属性文件默认的语言为en_US。第7章Struts2拦截器、国际化及文件操作而应用系统中的语言环境一般就是操作系统默认的语言,但也可以修改。如对于在IE浏览器中运行的电子商务网站,可以指定【语言首选项】。具体操作方法如下:【步骤1】打开语言查看界面。在IE浏览器菜单中打开【工具】里的【Internet选项】,在【常规】选项卡中选择【语言】按钮,如图7

27、-7所示。由于本操作系统为中文,所以图中语言只有中文。第7章Struts2拦截器、国际化及文件操作图7-7 语言界面第7章Struts2拦截器、国际化及文件操作【步骤2】添加支持语言。点击图7-7中的【添加】按钮,打开如图7-8所示的界面,选择英语(美国)和日语,点击【确定】按钮,将回到【语言首选项】界面,在【语言】栏中显示了中文、英文和日语三个语种。第7章Struts2拦截器、国际化及文件操作图7-8 添加语言 第7章Struts2拦截器、国际化及文件操作【步骤3】改变浏览器语言环境。添加完所需的语言后,可以利用右边的【上移】和【下移】按钮来改变语言首选项,如图7-9把【英语(美国)】作为第

28、一项。第7章Struts2拦截器、国际化及文件操作图7-9 修改语言顺序 第7章Struts2拦截器、国际化及文件操作2.资源文件中的参数以上解决了国际化文件的建立,接下来就应该是文件中的内容了。Struts2框架中属性文件的格式为“key=value”的方式,其中key将会匹配程序中使用的key,value的值为找到匹配后显示的内容。有多个“key=value”组合时,可显示在不同的行,不需添加分号来间隔。比如在类型转换中使用过的一个message.properties的配置为:xwork.default.invalid.fieldvalue=0 invalid第7章Struts2拦截器、国

29、际化及文件操作当字段中任何转换出错时,都会显示“字段名 invalid”。以上的代码中出现了0,这是Struts2中的消息文本参数。Struts2提供了两种在消息文本中设置参数的方式:使用占位符或OGNL表达式。占位符形式为09;OGNL表达式在消息文本中的语法为:$属性名。设置了参数后,如何来填充参数呢?Struts2也提供了两种方式:第7章Struts2拦截器、国际化及文件操作 JSP中通过s:text标签的s:param标签来指定参数值,按s:param出现的顺序匹配占位符的位置;Action中通过getText(String aTextName,List args)或getText(S

30、tring key,String args)方法来指定参数值,按集合或字符串数组的元素顺序匹配占位符的位置。第7章Struts2拦截器、国际化及文件操作3.Native2ascii工具的使用最后我们要讨论的问题是属性文件中的字符串编码,通常是7位ASCII码字符。对于中文字符,需要转换为相应的Unicode编码。在MyEclipse中提供了“Properties Editor”工具来进行编码转换,读者可以利用“Properties Editor”的在线更新地址下载eclipse下的插件:http:/propedit.sourceforge.jp/eclipse/updates/第7章Strut

31、s2拦截器、国际化及文件操作(1)直接转化字符串。在cmd窗口中输入native2ascii命令后,回车复制要转换的字符串:invalid.fieldvalue.age=年龄信息输入错误回车后输出:invalid.fieldvalue.age=u5e74u9f84u4fe1u606fu8f93u5165u9519u8bef拷贝到对应属性文件即可。第7章Struts2拦截器、国际化及文件操作(2)转换整个文件。当要转换的信息很多时,可以把所有的中文提示信息拷贝到文件message.txt,然后在cmd窗口中输入以下命令:native2ascii message.txt message_zh_CN

32、.properties第一个参数为要转换的文件名,第二个参数为转换后的文件名,可以是任何格式的文本文件,二者在同一目录下。转换结束后,把转换后的文件拷贝到工程中覆盖中文属性文件即可。第7章Struts2拦截器、国际化及文件操作注意,以上对整个文件转换的命令符必须满足此时执行路径与message.txt文件存放目录相同,比如message.txt文件放在E盘,则执行界面如图7-10所示。单句转换则在任何盘符下都可以。图7-10 native2ascii命令第7章Struts2拦截器、国际化及文件操作7.2.2 国际化实例及解释国际化实例及解释下面使用注册程序来实现其国际化,分别从以下4个方面来讲

33、解:Jsp页面和表单的国际化;类型转换信息的国际化;Action中信息的国际化;校验文件的国际化。第7章Struts2拦截器、国际化及文件操作在所有国际化实现前,要先把ch07工程的编码方案还原成Struts2默认的UTF-8编码,即修改以下三个地方:(1)把web.xml中的如下代码注释掉或删除:!-struts.i18n.encoding gbk -第7章Struts2拦截器、国际化及文件操作(2)把struts.xml中的如下代码注释掉或删除:!-(3)把相关的jsp文件页面编码从“GB2312”改为“UTF-8”:第7章Struts2拦截器、国际化及文件操作1.Jsp页面和表单的国际化

34、1)页面国际化国际化register.jsp页面的步骤如下:【步骤1】修改register.jsp页面代码。register.jsp页面代码如下:第7章Struts2拦截器、国际化及文件操作 第7章Struts2拦截器、国际化及文件操作 第7章Struts2拦截器、国际化及文件操作【步骤2】修改registerok.jsp页面代码。registerok.jsp页面代码如下:第7章Struts2拦截器、国际化及文件操作 第7章Struts2拦截器、国际化及文件操作【步骤3】配置属性文件。要实现中文和英文两个版本的界面,必须配置相对应的baseName_zh_CN.properties和baseN

35、ame_en_US.properties两个中英文对照的文件,其中baseName指具体的文件名。这里涉及到4个文件(新建属性文件的步骤请参考前面章节):第7章Struts2拦截器、国际化及文件操作 message_en_US.properties代码:#register.jsp pagereg.title=Registerusername.form=username:password.form=password:repassword.form=repassword:age.form=age:birthday.form=birthday:email.form=email:submit.form

36、=Submit#registerok.jsp page第7章Struts2拦截器、国际化及文件操作reg.success=Today is 0.Welcome 1,you have successfully registered message_zh_CN.properties代码:#register.jsp pagereg.title=注册username.form=用户名password.form=密码repassword.form=密码确认age.form=年龄birthday.form=出生年月第7章Struts2拦截器、国际化及文件操作email.form=电子邮件submit.fo

37、rm=提交#registerok.jsp pagereg.success=今天是今天是0.欢迎欢迎 1,你已经成功注册你已经成功注册!temp_en_US.properties代码:site.logoname=Windbook Site temp_zh_CN.properties代码:site.logoname=清风书苑第7章Struts2拦截器、国际化及文件操作【步骤4】运行结果。重启Tomcat,运行注册页面,在如图7-11所示的页面中输入正确的数据,提交后的页面如图7-12所示,此时默认的浏览器语言为英文。第7章Struts2拦截器、国际化及文件操作图7-11 国际化英文注册界面 第7章

38、Struts2拦截器、国际化及文件操作图7-12 国际化英文提交页面 第7章Struts2拦截器、国际化及文件操作按照7.2.1节的知识把浏览器语言改为中文优先。注意,修改首选语言后,要重新开启浏览器才能使设置起作用。这时,在不修改任何代码的情况下重新运行的注册页面如图7-13所示,提交后的页面如图7-14所示。第7章Struts2拦截器、国际化及文件操作图7-13 国际化中文注册界面 第7章Struts2拦截器、国际化及文件操作图7-14 国际化中文提交页面 第7章Struts2拦截器、国际化及文件操作2)页面国际化知识点(1)s:text标签的使用。s:text标签单独使用时,它将首先查找

39、匹配的资源属性文件(查找顺序见7.2.3节)。如果在对应的属性文件中没有找到匹配的key值,那么text标签的标签体(开始标签和结束标签之间的文本)内容将作为默认消息输出;如果没有标签体,那么name属性的值将直接被输出。s:text标签的属性如表7-2所示。第7章Struts2拦截器、国际化及文件操作第7章Struts2拦截器、国际化及文件操作从实例中看,就是代码在英文语言的环境下查找massage_en_US.properties中的配置reg.title=Register。s:text标签内部还可以使用嵌套的param标签来指定消息文本的参数,而param标签的顺序则对应了消息文本中参数

40、的索引顺序。第7章Struts2拦截器、国际化及文件操作(2)s:param标签和属性文件参数的配对。s:param标签被用作其他标签的子标签,用于为其他标签提供参数,此处就是为text标签提供参数。param标签的属性如表7-3所示。第7章Struts2拦截器、国际化及文件操作因此我们知道在使用param标签时,参数的值可以通过value属性给出,如代码中当前日期值的取得;也可以在标签体中给出,如代码中username值的取得。第7章Struts2拦截器、国际化及文件操作以上代码中定义了两个参数值,那么找到属性文件massage_en_US.properties中的配置,其中0匹配第一个参数

41、,1匹配第二个参数,就是我们在图7-12和图7-14用线标出的地方。reg.success=Today is 0.Welcome 1,you have successfully registered!第7章Struts2拦截器、国际化及文件操作(3)s:i18n标签的使用。s:i18n标签用于将一个资源包放入值栈,它一般和s:text标签配合使用。如代码:i18n标签的属性如表7-4所示。第7章Struts2拦截器、国际化及文件操作代码中通过i18n标签将baseName为temp的资源包引入,使得text标签要到对应的temp_en_US.properties文件中获取键值为site.log

42、oname的文本消息,而在中文语境下要查找temp_zh_CN.properties文件。第7章Struts2拦截器、国际化及文件操作(4)表单国际化。表单标签的国际化非常简单,只要指定表单组件的key属性即可,如代码:第7章Struts2拦截器、国际化及文件操作其匹配方式同text标签类似:在英文语言的环境下,查找massage_en_US.properties中的配置“username.form=username”,因为textfield标签的key属性值为username.form,与属性文件的key相同则匹配,那么运行时处的代码显示为username,即显示与属性文件key匹配的消息文

43、本。而在中文语言环境下需查找massage_zh_CN.properties中的配置“username.form=用户名”。第7章Struts2拦截器、国际化及文件操作在代码中还提供了另一种使用getText()方法获取资源文件中消息字符串的方法,它一般使用在label属性中。其格式为:label=%getText(key值),其中getText(String aTextName)方法用于获取以参数aTextName为键的消息字符串,如果没找到,则返回null。第7章Struts2拦截器、国际化及文件操作2.类型转换错误信息的国际化为了让国际化步骤一步步进行,应先把检验文件RegisterAc

44、tion-validation.xml和RegisterAction-simple-validation.xml转移到其它任何文件夹,使得校验器暂时失效。在注册示例中我们对email和birthday进行了自定义类型转换,其它属性都是使用Struts2内置的类型转换器来实现的。而当类型转换错误发生时,我们做了两个错误提示的配置:第7章Struts2拦截器、国际化及文件操作 在全局文件massage.properties中定义所有类型转换错误提示为“属性名 invalid”;在局部文件RegisterAction.properties中定义日期类型转换错误提示为“birthdays format

45、 is yyyy-MM-DD!”。接下来对这两部分进行国际化。1)全局文件错误提示的国际化全局文件错误提示的国际化很简单,就是把提示信息分别定义在massage_en_US.properties和massage_zh_CN.properties文件中即可。第7章Struts2拦截器、国际化及文件操作在massage_en_US.properties中添加配置代码如下:xwork.default.invalid.fieldvalue=0 invalid在massage_zh_CN.properties中添加配置代码(注意中文转换)如下:xwork.default.invalid.fieldval

46、ue=0 输入无效第7章Struts2拦截器、国际化及文件操作2)局部文件错误提示的国际化对于局部文件的错误信息也可以定义到massage_en_US.properties文件中,但为了区别开而不至于使全局属性文件过于庞大,可以进行类级别资源文件的定义,其作用范围只针对一个action文件,属性文件的baseName为作用action的名字,文件也必须放在与作用action的同一个包中。如本例中文件名为RegisterAction_en_US.properties和RegisterAction_ zh_CN.properties,文件存放在com.action包中。第7章Struts2拦截器、

47、国际化及文件操作在com.action包中新建RegisterAction_en_US.properties文件,添加配置代码如下:invalid.fieldvalue.birthday=birthdays format is yyyy-MM-DD!在com.action包中新建RegisterAction_zh_CN.properties文件,添加配置代码(注意中文转换)如下:invalid.fieldvalue.birthday=日期输入格式必须是 yyyy-MM-DD!第7章Struts2拦截器、国际化及文件操作3)验证国际化信息以上完成了类型转换中错误信息提示的国际化,重启Tomcat

48、(注意属性文件修改后,必须重启服务器才能使配置起作用),在浏览器首选语言为中文的前提下,输入如图7-15所示的错误数据类型,提交后将显示如图7-16所示的中文错误提示。第7章Struts2拦截器、国际化及文件操作图7-15 类型转换错误中文注册界面 第7章Struts2拦截器、国际化及文件操作图7-16 类型转换错误中文提交界面 第7章Struts2拦截器、国际化及文件操作3.Action中信息的国际化类型转换成功后,就要进行数据有效性验证了。有效性验证我们已在第6章详细讲解过了,有两种方式:实现ActionSupport中的validate()方法或使用校验文件。本节我们讲解如何在actio

49、n中访问本地化消息。由于在注册流程中定义了很详细的校验信息,因此此处选择username属性来进行国际化示例。第7章Struts2拦截器、国际化及文件操作进行Action国际化的步骤如下:【步骤1】Action文件的修改。在RegisterAction.java文件中增加验证有效性的方法代码:public void validateExecute()if(null=username|username.trim().length()=0)this.addFieldError(username,this.getText(username.action.null);this.addActionErr

50、or(this.getText(username.action.null);else if(username.length()10)第7章Struts2拦截器、国际化及文件操作 this.addFieldError(username,this.getText(username.action.length,new String username);/List list=new ArrayList();/list.add(username);/this.addActionError(this.getText(username.action.length,list);第7章Struts2拦截器、国际

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《基于JavaEE的电子商务网站建设》课件第7章.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|