Struts2国际化
- 格式:pdf
- 大小:345.62 KB
- 文档页数:7
一、 国际化国际化Internationalization是使程序在不做任何修改的情况下,就可以在不同的国家或地区和不同的语言环境下,按照当地的语言和格式习惯显示字符。
常用的ISO-639语言代码语言代码汉语(Chinese) zh英语(English) en德语(German) de法语(French) fr日语(Japanese) ja朝鲜语(Korean) ko常用的ISO-3166国家和地区代码国家或地域代码中国(China) CN美国(United States) US英国(Greate Britain) GB加拿大(Canada) CA日本(Japan) JP韩国(Korea) KR中国香港(Hongkang) HK中国台湾(Taiwan) TW资源包查找顺序(假设我们使用简体中文)1.MyResource_zh_CN.properties2.MyResource_zh.properties3.MyResource.propertiesStruts2访问国际化消息Struts2提供了多种方式来访问资源文件中的本地化消息,以适应不同的应用场景,主要分为1.在action中访问本地化消息2.在JSP页面中访问本地化消息3.在表单标签的属性中访问本地消息4.在资源文件中访问本地消息。
项目中实现国际化(中英文切换)步骤一、在src目录下面分别新建两个文件:myResource_en_US.properties=login pageerName=usernamelogin.password=passwordlogin.submit=loginlogin.out=exitmyResource_zh_CN.properties=登陆页面erName=用户名login.password=密码login.submit=登陆注意,中文需要进行字符编码,通过以下命名可以实现:native2ascii –encoding XXX input_file output_file步骤二、配置struts.xml文件<constant name="struts.custom.i18n.resources" value=" myResource " />步骤四、在页面中访问资源文件<h1><s:text name=""></s:text></h1><s:form><s:textfield key="erName"/><s:password label="%{getText('login.password')}"/><s:submit key="login.submit"/></s:form>最终效果图:二、 拦截器拦截器(Interceptor)是动态拦截Action调用的对象,类似于Servlet中的过滤器。
在执行Action的业务逻辑处理方法(execute())之前,Struts2会首先执行在struts.xml中引用的拦截器。
拦截器是struts2的一个重要特性。
Struts2框架的大多数核心功能都是通过拦截器来实现的,像避免表单重复提交、类型转换、对象组装、验证、文件上传等,都是在拦截器的帮助下实现的。
拦截器之所以称为“拦截器”,是因为它可以在Action执行之前和执行之后拦截调用。
拦截器原理图Struts2内置拦截器Struts2内建了大量的拦截器,这些拦截器以name-class对的形式配置在struts-default.xml文件中,其中name是拦截器的名字,就是以后使用该拦截器的唯一标识;class则指定了该拦截器的实现类,如果我们定义的package继承了Struts2的struts-default包,则可以自由使用下面定义的拦截器,否则必须自己定义这些拦截器。
自定义拦截器实现自定义拦截器方法有三种:✧实现Interceptor接口✧继承AbstractInterceptor类,此类实现了Interceptor接口✧继承MethodFilterInterceptor,可实现方法过滤拦截实现Interceptor接口,该接口定义了如下的三个方法:1.void init():该方法在拦截器实例创建后、intercept()方法被调用之前调用,用于初始化拦截器所需要的资源,例如数据库连接的初始化。
该方法只执行一次。
2.void destroy():该方法在拦截器实例被销毁之前调用,用于释放在init()方法中分配的资源。
该方法只执行一次。
3.String intercept(ActionInvocation invocation) throws Exception:该方法在Action执行之前被调用,拦截器为Action提供的附加功能在该方法中实现。
利用invocation参数,可以获取action执行的状态。
在intercept()方法中,如果要继续执行后续的部分(包括余下的应用于Action的拦截器、Action和Result),可以调用invocation.invoke()。
如果要终止后续的执行,可以直接返回一个结果码,框架将根据这个结果码来呈现对应的结果视图。
自定义简单拦截器步骤如下:步骤一:创建一个MyInterceptor类,此类去实现Interceptor接口package org.nf.util;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class MyInterceptor implements Interceptor {@Overridepublic void destroy() {System.out.println("============销毁");}@Overridepublic void init() {System.out.println("============初始化");}@Overridepublic String intercept(ActionInvocation invocation) throws Exception { System.out.println("============调用方法之前");String result = invocation.invoke();System.out.println("============调用方法之后");return result;}}步骤二、struts.xml中配置<!-- 定义拦截器 --><interceptors><interceptor name="myInterceptor"class="org.nf.util.MyInterceptor"/></interceptors><action name="stu"class="org.nf.action.StudentAction"><!-- 引入拦截器 --><interceptor-ref name="myInterceptor"/><result>/showInfo.jsp</result><result name="input">index.jsp</result></action>拦截器栈在很多时候,且些指定的拦截器需要被多个Action所使用,这个时候,如果我们为每一个Action都分别配置拦截器的话,不仅麻烦,而且不利后期的维护,此时就需要用到拦截器栈。
在struts.xml中的实现:<interceptors><!-- 定义拦截器 --><interceptor name="myInterceptor"class="org.nf.util.MyInterceptor"/><!-- 定义拦截器栈 --><interceptor-stack name="myStack"><interceptor-ref name="myInterceptor"/></interceptor-stack></interceptors><action name="stu"class="org.nf.action.StudentAction"><!-- 引入拦截器栈 --><interceptor-ref name="myStack"/><result>/showInfo.jsp</result><result name="input">index.jsp</result></action>指定拦截器作用于某个方法(继承MethodFilterInterceptor)✧需要拦截器作用的方法,使用excludeMethods方法✧不需要拦截器作用的方法,使用includeMethods方法✧多个方法用逗号隔开(,)struts.xml中的配置:<interceptors><!-- 定义拦截器 --><interceptor name="myInterceptor"class="org.nf.util.MyInterceptor"/><!-- 定义拦截器栈 --><interceptor-stack name="myStack"><interceptor-ref name="myInterceptor"/></interceptor-stack></interceptors><action name="stu_*"class="org.nf.action.StudentAction"> <!-- 引入拦截器栈 --><interceptor-ref name="myStack"><!—-不要拦截的方法 --><param name="excludeMethods">add</param><!—-要拦截的方法 --><param name="includeMethods">update,delete</param> </interceptor-ref><result>/showInfo.jsp</result><result name="input">index.jsp</result></action>。