Struts Html標(biāo)簽和標(biāo)準(zhǔn)的HTML標(biāo)簽功能相同,這里提倡在Struts應(yīng)用中使用Struts標(biāo)簽,這是因?yàn)檫@些標(biāo)簽可以和Struts框架的其他組件緊密的聯(lián)系起來(lái),如比標(biāo)簽用來(lái)定義HTML表單,Struts能夠把這個(gè)表單中的數(shù)據(jù)自動(dòng)映射到對(duì)應(yīng)的ActionForm中.下面對(duì)具體的標(biāo)簽進(jìn)行深度研究.首先研討一些基本的東東,我個(gè)人認(rèn)為不是很常用的,生成基本HTML元素的標(biāo)簽,這些標(biāo)簽和HTML元素對(duì)應(yīng),主要包括:
1)生成元素,這個(gè)標(biāo)簽有一個(gè)lang屬性,用于顯示用戶使用的語(yǔ)言,設(shè)置衛(wèi)true的時(shí)候,標(biāo)簽將先根據(jù)存儲(chǔ)當(dāng)前HttpSession中的Locale對(duì)象來(lái)輸出網(wǎng)頁(yè)數(shù)用的語(yǔ)言,如果沒(méi)有HttpSession或者里面沒(méi)有Locale對(duì)象,就根據(jù)HTTP請(qǐng)求頭的屬性來(lái)輸出語(yǔ)言,如果HTTP請(qǐng)求頭中沒(méi)有,就根據(jù)默認(rèn)的Locale來(lái)輸出語(yǔ)言.
2)生成元素,這個(gè)用于生成當(dāng)前網(wǎng)頁(yè)的絕對(duì)URL路徑.如果使用了這個(gè)標(biāo)簽,當(dāng)該網(wǎng)頁(yè)引用同一個(gè)應(yīng)用的其他網(wǎng)頁(yè)的時(shí)候,只需要給出相對(duì)于當(dāng)前網(wǎng)頁(yè)的相對(duì)URL路徑即可.
3)生成Anchor元素,這個(gè)是超連接標(biāo)簽,感覺(jué)有一些好處可言,比如允許在RUL中以多種方法包含請(qǐng)求參數(shù).當(dāng)用戶瀏覽器關(guān)閉Cookie的時(shí)候,會(huì)自動(dòng)重寫URL,把SessionID作為請(qǐng)求參數(shù)包含在URL中,用于跟蹤用戶的Session狀態(tài).它的主要屬性有三種,分別是forward指定全局轉(zhuǎn)發(fā)連接.href指定完整的URL連接.page指定相對(duì)于當(dāng)前網(wǎng)頁(yè)的RUL.
4)生成用戶請(qǐng)求URI,用于輸出超連接中的URL部分,但它并不生成HTML
元素.URI指的是URL中的協(xié)議,主機(jī)和端口以后的內(nèi)容.
5)生成HTML
元素,用于在HTML頁(yè)中嵌入圖片.page屬性指定當(dāng)前的URI.
根據(jù)我個(gè)人的一些看法,感覺(jué)Struts確實(shí)很好,但是在好的東西也有一些不實(shí)用的地方,JAVA也是如此,以上方法我比較推薦標(biāo)簽,感覺(jué)這個(gè)標(biāo)簽有十分不錯(cuò)的功效,下面闡述一下具體的使用方法:
1) 創(chuàng)建全局轉(zhuǎn)發(fā)連接:首先在Struts配置文件中配置
在JSP頁(yè)面中引用:index
2) 創(chuàng)建完整URL的連接,也就是說(shuō)可以連接到其他的站點(diǎn)
Action
3) 從一個(gè)網(wǎng)頁(yè)連接到同一個(gè)應(yīng)用的另外一個(gè)網(wǎng)頁(yè)
Action
4) 在URL或者RUI中包含請(qǐng)求參數(shù)的方法
Action
5) 在URL或者URI中包含單個(gè)請(qǐng)求變量的方法
pagemProperty>Action
paramId屬性指定請(qǐng)求參數(shù)名,paramName屬性指定變量名稱,paramProperty指定變量衛(wèi)JavaBean的屬性.
研討完了StrutsHtml標(biāo)簽庫(kù)的基本標(biāo)簽,下面開始研究一個(gè)重要的東東,Struts的表單標(biāo)簽以及它的子標(biāo)簽,單選按鈕,復(fù)選框,下拉列表等等,下面是詳細(xì)介紹:
1)表單標(biāo)簽的action屬性來(lái)指定當(dāng)用戶提交表單后,處理用戶請(qǐng)求的組件,就是說(shuō)在form里action屬性比如設(shè)置了一個(gè)in.do的,那么在配置文件中action元素的path屬性如果是/in,這就說(shuō)明是這個(gè)action來(lái)接收f(shuō)orm提交過(guò)來(lái)的數(shù)據(jù).這個(gè)感覺(jué)挺簡(jiǎn)單,此外還需要知道name是設(shè)置表單名字,method是來(lái)設(shè)置請(qǐng)求方法,比如Get或Post.
2)文本標(biāo)簽的property屬性指定字段的名字,它和ActionForm中的一個(gè)屬性匹配,這個(gè)屬于表單標(biāo)簽的一個(gè)子標(biāo)簽,可以把用戶填寫的值提交到具體的ActionForm中
3)標(biāo)簽在表單中生成取消按鈕,當(dāng)用戶按下取消按鈕的時(shí)候,產(chǎn)生一個(gè)取消事件,這個(gè)時(shí)間由Action來(lái)捕獲,至于如何處理在Action類中的execute()方法編程實(shí)現(xiàn),主要用途是在用戶按了提交按鈕,請(qǐng)求沒(méi)發(fā)送過(guò)去又不想提交的時(shí)候,起到一個(gè)反悔作用.
4)標(biāo)簽用來(lái)生成復(fù)位按鈕,類似以上的取消按鈕這些實(shí)現(xiàn)復(fù)位,取代了HTML代碼.
5)標(biāo)簽生成提交按鈕.使用方法和取消,復(fù)位一樣都是這樣寫代碼的:
提交.
6)標(biāo)簽在表單上生成隱藏字段,用于在表單上存放不希望讓用戶看到或者不允許修改的信息,它的屬性類似文本標(biāo)簽,property和ActionForm中的具體屬性對(duì)應(yīng).如果想要在表單想顯示某個(gè)值,而且不希望用戶修改,可以用這個(gè)方法.
7)標(biāo)簽在表單上生成標(biāo)準(zhǔn)的HTML檢查框,比如ActionForm中的屬性是boolean類型只能有2個(gè)值,就可以在表單中使用這個(gè)標(biāo)簽來(lái)表示.主要通過(guò)property屬性來(lái)設(shè)置對(duì)應(yīng)的ActionForm屬性,還有一個(gè)value屬性,用來(lái)設(shè)置用戶選中檢查框的值,默認(rèn)值是true,就是說(shuō)當(dāng)用value=false的時(shí)候如果用戶沒(méi)選擇這個(gè)檢查框,就把ActionForm的屬性設(shè)置衛(wèi)true,為了檢查框能夠正常工作,必須在ActionForm的reset()方法中對(duì)其復(fù)位,在value屬性為true的時(shí)候,必須在reset()方法中把對(duì)應(yīng)的屬性設(shè)置為false.
8)標(biāo)簽和差不多,區(qū)別就在于它可以生成復(fù)選框.它的性能比更加靈活,可以動(dòng)態(tài)的決定被選中復(fù)選框的數(shù)目,只要property屬性相同,而value屬性不一樣,就可以和ActionBean的同一個(gè)數(shù)組對(duì)應(yīng).此外checkbox只能和blooean類型的屬性對(duì)應(yīng),而multibox則沒(méi)有限制.
9)標(biāo)簽表示單選按鈕,多個(gè)標(biāo)簽可以組合使用.
10)標(biāo)簽生成下拉列表或多選列表,重要的屬性是size屬性指定每次網(wǎng)頁(yè)上顯示的可選的項(xiàng)目數(shù)量.multiple屬性指定是否支持多項(xiàng)選擇,如果設(shè)置為true表示多選列表,默認(rèn)為false.property屬性于ActionForm中的某個(gè)屬性對(duì)應(yīng),這個(gè)屬性用來(lái)存儲(chǔ)用戶在列表上選中的值.在單選的情況下,ActionForm的對(duì)應(yīng)屬性定義為簡(jiǎn)單類型,不能是數(shù)組.在多選的情況下類型是數(shù)組.
以上是對(duì)StrutsHtml標(biāo)簽庫(kù)的Form系列標(biāo)簽以及子標(biāo)簽的簡(jiǎn)單闡述,這些標(biāo)簽不一定都常用,所以了解即可,能掌握常用的幾個(gè)標(biāo)簽就OK了.下面研究一下文件上傳,是指通過(guò)用戶瀏覽把用戶本地的文件傳到Web服務(wù)器標(biāo)簽提供了從Html表單中上傳文件的功能.這個(gè)標(biāo)簽也是Form標(biāo)簽的子標(biāo)簽所以必須嵌套在中,而且的method屬性必須設(shè)置為Post.enctype編碼屬性必須設(shè)置為multipart/form-data.而且它的property屬性必須設(shè)置和ActionForm中的Flie類型的屬性對(duì)應(yīng).如果property=”file”則ActionForm中必須要設(shè)置private File file;屬性,而且提供相應(yīng)的get/set方法.然后通過(guò)Action來(lái)完成接收上傳文件的功能,首先創(chuàng)建一個(gè)讀取用戶上傳文件的InputStream流對(duì)象,然后創(chuàng)建一個(gè)把上傳數(shù)據(jù)寫到目標(biāo)文件中的OutputStream對(duì)象,接下來(lái)通過(guò)一個(gè)馴化把數(shù)據(jù)從源文件寫到目標(biāo)文件中,上傳就實(shí)現(xiàn)了.
標(biāo)簽用于輸出錯(cuò)誤消息,在request和session范圍尋找ActionMessages或者其子類ActionErrors集合對(duì)象.在從ActionMessages集合對(duì)象中讀取ActionMessage對(duì)象,把ActionMessage對(duì)象包含的錯(cuò)誤消息文本顯示在網(wǎng)頁(yè)上.至于具體的錯(cuò)誤文本消息存放在ResourceBundle中,而且標(biāo)簽?zāi)茏R(shí)別錯(cuò)誤文本中的HTML元素,例如等等.標(biāo)簽可以存放在網(wǎng)頁(yè)的任何地方,也可以在表單內(nèi).因?yàn)樗敵鲥e(cuò)誤和它在網(wǎng)頁(yè)的位置無(wú)關(guān).它的具體屬性是.1)name:指定ActionMessages對(duì)象的屬性key,標(biāo)簽處理類根據(jù)這個(gè)key來(lái)家查request或session范圍的ActionMessages集合對(duì)象.2)property:指定消息屬性,如果不設(shè)置會(huì)顯示ActionMessages集合對(duì)象中所有的消息對(duì)象ActionMessage.3)bundle:指定ResourceBundle如果這個(gè)沒(méi)設(shè)置,將從應(yīng)用中默認(rèn)的ResourceBundle中獲取消息.
標(biāo)簽和標(biāo)簽有些類似,也能夠在網(wǎng)頁(yè)中輸出消息,具體的屬性是:1)name:指定ActionMessages對(duì)象的屬性key,標(biāo)簽處理根據(jù)這個(gè)key來(lái)檢索request或者session范圍內(nèi)的ActionMessages對(duì)象.2)message:指定消息的來(lái)源,如果是true則從request或者session范圍內(nèi)檢索出屬性key為Globals.MESSAGE_KEY的具體的ActionMessages對(duì)象.3)id:用來(lái)命名從消息集合中檢索出每個(gè)ActionMessages對(duì)象,它和標(biāo)簽的name屬性匹配.