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 視圖
繼承