struts2標記庫_第1頁
struts2標記庫_第2頁
struts2標記庫_第3頁
struts2標記庫_第4頁
struts2標記庫_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Struts2 標記庫,本講要點與教學目標,【教學要點】 1、Struts2標記庫的特性 2、Web處理結果的存儲方式-值棧(ValueStack) 3、OGNL的應用 4、國際化支持 【教學目標】 了解Struts2標記庫的特性,理解Web對請求處理結果的存儲方式與存儲特點,掌握OGNL的應用。,2,Struts2標記庫的特性,【引言】 在前面的章節(jié)中,我們講了Action處理客戶端的請求,以及處理請求時攔截器所起的作用。 (1)在完成了請求處理后還需要做什么? -將處理得到的結果數(shù)據(jù)展示給用戶。 (2)在MVC模型中哪個組件實現(xiàn)結果數(shù)據(jù)的展示? -視圖 (3)Struts2下的數(shù)據(jù)如何存儲

2、?視圖組件如何訪問和展示這些數(shù)據(jù)? -OGNL與Struts2標記,3,Struts2標記庫的特性,【標記庫概述】 1、標記庫 在JSP頁面中除了可以使用HTML的靜態(tài)標記和JSP2.0規(guī)范中的標準動作外,還可以引用外部的標記庫,如: JavaEE5.0規(guī)范中提供了JSP標準標記庫(JSTL) FCKEditor組件中提供了FCKEditor標記庫 用戶也可以開發(fā)自己的標記庫并使用 標記的功能本質上是由該標記關聯(lián)的一個類實現(xiàn)的 2、外部標記庫的組成 一組標記類、一個標簽庫文件(tld文件)閱讀struts-tags.tld 3、外部標記庫的引用 在JSP中通過指令引用,4,Web處理結果的存儲

3、方式,【W(wǎng)eb數(shù)據(jù)存儲】可以分為兩部分: (1)Value Stack :值棧,每次在Action組件調(diào)用之前,框架都會創(chuàng)建一個ValueStack對象。用來存儲與Action請求處理相關的Action組件以及模型對象 (2)Stack Context:棧環(huán)境,用來存儲本次請求相關的Web運行環(huán)境信息,如應用上下文、會話和響應等 【在JSP中查看值棧】 可以輸出整個ActionContext中的數(shù)據(jù),5,標記的語言-OGNL,OGNLObject Graph Navigation Language(對象圖導航語言)是一種功能強大的表達式語言,可以通過簡單的表達式來訪問Struts2中的數(shù)據(jù)。

4、OGNL表達式一般與Struts2標記一起使用,訪問Web數(shù)據(jù)分為兩種情況(Value Stack /Stack Context): 對Value Stack中的數(shù)據(jù):直接對屬性進行訪問,如果該屬性類型是對象,則可以使用點語法獲取其內(nèi)部屬性 如: 對Stack Context中的環(huán)境數(shù)據(jù):對其屬性的訪問要求以“#”號開始 如:,6,Struts2標記的種類,1、控制標記 主要包含用于實現(xiàn)分支,循環(huán)等流程控制的標簽 如:if elseif else iterator 2、數(shù)據(jù)標記 主要提供各種數(shù)據(jù)訪問相關的功能 如:action property debug bean 等 3、UI標記 表單標記

5、:允許客戶端提交信息 非表單標記:顯示錯誤信息、支持Ajax,7,控制標記,if、elseif、else:實現(xiàn)分支控制功能 iterator:將集合進行迭代輸出(循環(huán)) append、merge:對集合進行合并操作 generator:將一個字符串解析成一個集合 sort:將集合排序 subset:取集合子集,8,if、elseif、else,【描述】 1、if可以單獨使用,也可與else、elseif搭配使用 2、if和elseif有一個必選類屬性test,用來實現(xiàn)邏輯判斷,test屬性類型是OGNL邏輯表達式 3、標簽體的內(nèi)容可以是JSP網(wǎng)頁元素,9,if、elseif、else,age=

6、 兒童 青年 老年 ,10,迭代控制標記- iterator,【描述】 用于遍歷集合(java.util.Collection的子類)中的元素:List、Set、Map和數(shù)組 該標簽的屬性如下: id:指定集合中元素的ID引用 value:用來指定被迭代輸出的集合,通常由OGNL表達式指定 status:代表當前迭代元素的狀態(tài),是IteratorStatus實例,11,IteratorStauts實例包含方法,int getCount():返回當前迭代過元素的總數(shù)。 int getIndex():返回當前迭代元素的索引。 boolean isEven():判斷當前迭元素是否為偶數(shù)行。 bool

7、ean isOdd():判斷當前迭元素是否為奇數(shù)行。 boolean isFirst():判斷當前迭元素是否為第一個元素。 boolean isLast():判斷當前迭元素是否為最后一個元素 IteratorStauts的這些方法分別對應了count, index,even,odd,first,last屬性,12,例1:不使用status屬性的迭代,【說明】 value=1,2,3:表示集合,默認為List, | ,13,例2:使用status屬性的迭代, ,【說明】status=st,聲明的st是一個局部對象,只能在迭代體中使用,其值臨時保存在Stack Context中,取其屬性時以#號開

8、始,14,例3:Map類型元素的迭代,Map類型元素 常量式為:#key1:value1,key2:value2,其它元素, : ,15,數(shù)據(jù)標記概述,property 用于輸出value屬性指定的值 action 用于在JSP頁面中調(diào)用一個Action,如果指定其executeResult,則可以將Action處理結果包含到JSP中 bean 用于創(chuàng)建一個JavaBean實例,如果指定其id屬性,則可以將創(chuàng)建的實例放到stack context中 param 用于設置一個參數(shù),一般作為其它標記的子標記,16,數(shù)據(jù)標記概述,set 設置一個新變量,并可以將新變量放到指定的范圍中 push 用于

9、將某個值放到Value Stack的棧頂 include 在JSP頁面中包含其他JSP或Servlet資源 url 用于生成一個URL地址 date 用于格式化輸出一個日期 debug 生成一個調(diào)試鏈接,17,property,【property標簽屬性】 value:指定需要輸出的屬性值,如果沒有指定則默認輸出value stack棧頂對象 default:指定默認輸出值,當要輸出的值為null時輸出 escape:是否轉義輸出內(nèi)容中的HTML(默認true) true時轉義輸出: false時直接輸出: 換行,18,action、param標記,【action屬性】 id:此Action在

10、頁面中的引用標識 name:要引用的action的名字 namespace:action所在的命名空間 executeResult:是否將結果包含到當前頁中(false) 【param屬性】 name:要傳入的參數(shù)名 標記體中的內(nèi)容以String類型傳入的參數(shù)值,19,例6:action標記的使用,【案例說明】 在index.jsp中引用Action,并將其結果視圖的內(nèi)容包含到當前頁中 【基本步驟】 1、創(chuàng)建Action類:InAction,定義一個屬性name, 2、在struts.xml中配置Action的名字為in,所在包的namespace=/,視圖為in_success.jsp 3、

11、創(chuàng)建in_success.jsp,核心代碼, 被包含的action視圖:name- ,20,例6:action標記的使用,4、在index.jsp中加入如下代碼: 5、分析運行結果,查看Action Context中的數(shù)據(jù),是否有inaction1、inaction2兩個屬性, hello ,21,bean標記,【屬性】 id:用于引用該bean對象,如果指定該屬性,框架將其放到Stack Context中 name:指定要實例化的JavaBean類 例: 測試分析 Stack Context中的信息變化, 金毛 輸出Bean對象的屬性: ,22,set標記,【屬性】 name:新創(chuàng)建的變量名

12、 id:用于引用該元素 說明:如果沒有id,則用name值引用變量,id優(yōu)先 scope:存放的范圍 application session request page action,默認放置在Stack Context中 value:指定賦給變量的值 例:, 輸出變量dd的屬性值:,23,date標記,【屬性】 name:要格式化的日期值 id:引用元素的id format:指定日期輸出格式, 今天的日期是(原始格式): 今天是(MM/dd/yyyy):,24,什么是國際化?,在很多國際化的網(wǎng)站中,可根據(jù)不同國家地區(qū)設置不同語言的版本,以方便不同國家和地區(qū)的用戶訪問, 如:清華大學網(wǎng)站 Goo

13、gle網(wǎng)站:.hk/,25,什么是國際化?,【國際化(internationalization,i18n)】是指在設計軟件時使軟件具有支持多種語言的功能。能夠在創(chuàng)建不同語言版本時,無須修改應用程序源代碼。 【軟件國際化的特征】 (1)可擴展性:支持新語言時,不需要修改程序,不需要重新編譯。通過增加和修改資源文件,可以增加對某種語言的支持、實現(xiàn)訂制指定語言的界面顯示 (2)全球化:能夠運行于不同區(qū)域語言環(huán)境中,可以支持不同區(qū)域的語言文字和數(shù)據(jù)信息的輸入、輸出、顯示和存儲 (3)本地化:滿足特定區(qū)域和語言環(huán)境,信息的輸入和輸出能夠符合該區(qū)域的使用習慣,例如日期顯示格式。,26,什么是國際化?,【國

14、際化涉及的方面】 (1)靜態(tài)的文字顯示 (2)與區(qū)域習慣相關的內(nèi)容,如:日期時間、郵政編碼、電話號碼、地址、貨幣、度量等 (3)提示信息,如:警告、錯誤、操作提示、在線幫助等 【國際化的實施】 國際化不是在產(chǎn)品功能和代碼基本完成后的一個附加階段,而是應該從軟件需求分析開始,并貫穿軟件項目實施的全過程,27,一、Java國際化,【相關類】 Java國際化主要使用3個類完成:Locale、ResourceBoundle、MessageFormat 【Locale類】對應一個特定區(qū)域和語言環(huán)境 (1)靜態(tài)方法:Locale getDefault() (2)靜態(tài)常量標識符:US、CHINA、JAPAN

15、,CHINESE等 (3)獲取國家、語言名:getCountry()、getLanguage() (4)獲取適于顯示的國家、語言名 getDisplayCountry()、getDisplayLanguage(),28,案例1:Locale類的基本應用,public class Test public static void main(String args) Locale locales = Locale.getAvailableLocales(); /獲取Java支持的語言和區(qū)域 for (int i = 0; i +localesi.getDisplayLanguage()+- +loc

16、alesi.getDisplayCountry(); Locale lo=Locale.getDefault();/獲取本地系統(tǒng)默認的Locale對象 System.out.println(lo.getCountry()+,+lo.getDisplayCountry(); System.out.println(lo.getLanguage()+,+lo.getDisplayLanguage(); ,29,一、Java國際化,【ResourceBundle類】用于加載一個資源文件 資源包是一組資源文件,特點是基本名相同,在此基礎上按一定命名規(guī)范進行擴展。命名規(guī)范如下: 基本名_語言名_國家名_開

17、發(fā)商或瀏覽器.properties 其中最后一個擴展項“_開發(fā)商或瀏覽器”很少用 如下就是一組資源名為message的資源包 perties message_perties message_zh_CN.properties,30,一、Java國際化,獲取資源對象的方法 (1)ResourceBundle getBundle(String baseName)使用指定的基本名稱、默認的語言環(huán)境獲取資源對象。 (2)ResourceBundle getBundle(String baseName,Locale locale)使用指定的基本名稱和語言環(huán)境獲取資源對象。

18、 說明 (1)參數(shù)baseName是具有完整路徑的基本名 (2)資源文件內(nèi)容是標準的鍵值對(key-value)格式 獲取鍵值的方法:String getString(String key),31,一、 Java國際化,【Java國際化基本步驟】 (1)創(chuàng)建資源文件:為準備支持的Locale編寫對應的資源文件 (2)設置Locale:在程序中的某個地方,提供Locale的設置,或者將設置放入配置文件中 (3)根據(jù)Locale創(chuàng)建指定的資源綁定對象 (4)通過資源綁定對象獲取與Locale相關的信息,32,案例2:Java國際化,【具體步驟】 1、創(chuàng)建資源文件。為了實現(xiàn)程序國際化,本例創(chuàng)建兩個資

19、源文件Message_zh_CN.properties、Message_en_US.properties 2、創(chuàng)建一個Test類 main方法中的關鍵代碼,Locale lo=Locale.getDefault();/獲取本地系統(tǒng)默認的Locale對象 ResourceBundle rb = ResourceBundle.getBundle(i18n.Message,lo); System.out.println(rb.getString(promote); System.out.println(rb.getString(welcome);,33,案例2:Java國際化,3、運行測試: 4、將

20、Locale lo=Locale.getDefault();改為: Locale lo=Locale.US; 運行測試:,34,二、 Struts2對國際化的支持,【Struts2的國際化支持】 (1)Action組件的基類ActionSupport實現(xiàn)了TextProvider接口,該接口有一個方法getText(String key),用來從資源綁定對象中獲取指定信息資源 (2)每個Action組件,不需要手動創(chuàng)建資源綁定對象,框架將自動創(chuàng)建該對象 (3)不需要手動獲取Locale對象,框架將自動檢測Web請求的Locale屬性,并根據(jù)它動態(tài)關聯(lián)資源文件 (4)提供了、等標記訪問本地化信息

21、 即:開發(fā)人員把準備好的相應資源文件放到合適的位置,然后在需要顯示本地化信息的位置調(diào)用資源文件中的信息即可。,35,三、訪問國際化消息的方法,1、Action中訪問國際化消息:getText(String key) 2、JSP中訪問國際化消息有三種方法: (1) 如: (2) 如: (3)Struts2的UI標記中用國際化信息設置label屬性時,不直接對label設置,而使用key屬性,即:key=keyName“ 如: ,36,四、Struts2國際化級別,【Action級】 僅在指定的Action及視圖中使用,資源文件基本名是Action類名,其位置與Action組件同一個目錄, 【包級

22、】 在指定包中的所有Action及視圖中使用,資源文件基本名必須是package,其位置與Action組件同一個目錄 【應用級】如果用到國際化,就要使用應用級的國際化 應用程序中所有Action及視圖中使用,其位置必須放在根目錄,其基本名可以任意,但必須在struts.xml中進行常量聲明, 如: 【臨時指定】標記可臨時指定資源文件,有效范圍在該標記內(nèi),37,案例5:應用級資源文件的使用(登錄),【案例要求】 使用應用級的國際化資源文件對用戶登錄業(yè)務實現(xiàn)國際化 【案例分析】 與語言環(huán)境相關的內(nèi)容:登錄頁中的輸入提示、登錄成功的歡迎提示 針對以上內(nèi)容編寫資源文件,并在視圖中輸出與語言環(huán)境相關的信息,38,案例5:應用級資源文件的使用(登錄),【基本步驟】 1、在根目錄下創(chuàng)建2個國際化資源文件,支持2種語言環(huán)境 2、在struts.xml中配置資源文件常量 3、創(chuàng)建用戶登錄頁login.jsp和登錄成功頁index.jsp,并將頁面中的與語言環(huán)境相關的信息使用國際化輸出 4、創(chuàng)建和配置Action組件 (1)創(chuàng)建Action組件DoLoginAction并配置,實現(xiàn)用戶模擬登錄) (2)在struts.xml中直接配置名為“l(fā)ogin”的Action組件,success視圖為login.jsp,(使用默認的ActionSupport類,39,案例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論