4、 国际化信息显示
一、 国际化原理 ? 什么是国际化 ?
同一款软件 能够为不一样用户,提供不一样语言界面 ---- 国际化软件
须要一个语言资源包(不少properties文件,每一个properties文件 针对一个国家或者语言 ,经过java程序根据来访者国家语言,自动读取不一样properties文件 )
二、 资源包编写
properties文件命名 : 基本名称_语言(小写)_国家(大写).properties
例如 :
messages_zh_CN.properties 中国中文
messages_en_US.properties 美国英文java
三、 ResourceBundle 根据不一样Locale(地域信息),读取不一样国家 properties文件
ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.US);编程
四、 struts2 框架国际化配置
第一种 全局国际化信息文件 (全部Action均可以使用 ) ------- 最经常使用
* properties文件能够在任何包中
* 须要在struts.xml 中配置全局信息文件位置
struts.xml
<constant name="struts.custom.i18n.resources" value="messages"></constant> messages.properties 在src根目录
<constant name="struts.custom.i18n.resources" value="cn.itcast.resources.messages"></constant> messages.properties 在 cn.itcast.resources 包框架
国际化信息
在Action中使用 : this.getText("msg");
在jsp中使用 :<s:text name="msg" />
在配置文件中(校验xml) : <message key="agemsg"></message>
第二种 Action范围信息文件 (只能在某个Action中使用 )
数据只能在对应Action中使用,在Action类所在包 建立 Action类名.properties --------- 无需配置jsp
第三种 package范围信息文件 (package中全部Action均可以使用 )
数据对包 (包括子包)中的全部Action 都有效 , 在包中建立 package.properties ----- 无需配置ui
第四种 临时信息文件 (主要在jsp中 引入国际化信息 )
在jsp指定读取 哪一个properties文件
<s:i18n name="cn.itcast.struts2.demo7.package">
<s:text name="customer"></s:text>
</s:i18n>this
*** 向信息中传递参数 {0} {1} ------------ MessageFormat 动态消息文本
this.getText("required", new String[] { "用户名" });orm
===============================================================================================================================================
5、 自定义拦截器
拦截器 的使用 ,源自Spring AOP(面向切面编程)思想
拦截器 采用 责任链 模式
* 在责任链模式里,不少对象由每个对象对其下家的引用而链接起来造成一条链。
* 责任链每个节点,均可以继续调用下一个节点,也能够阻止流程继续执行
在struts2 中能够定义不少个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每个拦截器 )xml
一、 struts2 全部拦截器 都必须实现 Interceptor 接口
二、 AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现对象
全部实际开发中,自定义拦截器 只须要 继承 AbstractInterceptor类, 提供 intercept 方法实现
三、 经常使用struts2 拦截器
<interceptor-ref name="modelDriven"/> 模型驱动
<interceptor-ref name="fileUpload"/> 文件上传
<interceptor-ref name="params"> 参数解析封装
<interceptor-ref name="conversionError"/> 类型转换错误
<interceptor-ref name="validation"> 请求参数校验
<interceptor-ref name="workflow"> 拦截跳转 input 视图
继承