傳智播客-struts2(5)-url標籤的巧用、國際化

struts2的標籤庫很豐富,尤其是再加上OGNL表達示更是如虎添翼。下面重點講講開發中最常用的兩類標籤:url和i18n的應用。

 

<s:url>標籤的巧用
url標籤的典型應用:
<s:url namespace="/user" action="regUser" var="myurl" includeParams="all" escapeAmp="false">
 <s:param name="name" value="'張三'"></s:param>
</s:url>
<a href="<s:property value="myurl"/>">提交</a>

 

1、使用<s:url action="" namespace="" method="" />不用關心web應用程序的路徑和Action映射的擴展名。<s:url>中沒有指定namespace屬性時,將根據瀏覽器當前所訪問的url地址來推測包名,並與action屬性指定的內容一起生成最終的url地址。例如,當開發完一個項目部署到用戶的服務上時,如果用戶更改了該項目名,不用修改任何代碼依然可以通過修改後的項目名(contex root)正常訪問。

 

2、可以自動附加jsessionid參數進行url重寫,這樣的話,即使客戶端瀏覽器禁止使用cookie,仍然可以實現會話跟蹤。不過jsessionid只會在第一次連接的時候出現在地址欄,之後再連接的話,如果客戶端瀏覽器支持cookie,則地址欄後面的jsessionid會被自動去掉。

 

3、利用OGNL表達式對參數信息進行url編碼,這樣的話,即使是非標準西文字符(例如中文)也會經處理後再放到地址欄,避免因字符問題導致請求出錯。例如<s:param name="name" value="'張三'"></s:param>,value屬性值"'張三'"如果寫成"張三"或者"%{張三}",是得不到正確的請求地址的。雖然使用單引號也可以,不過因爲struts2規定param的value屬性值是OGNL表達式,所以使用"%{'張三'}"更規範。%{}能保證{}內的值強制轉爲OGNL表達式。

 

4、直接使用<s:url />標籤可以獲得當前地址,而使用includeParams屬性時會帶上原來的請求參數,默認值爲get,還有post和all。例如很多大型網站的鏈接地址總是要帶上userid之類的信息。(jstl中的<c:url>標準標籤也有<s:url>標籤的後兩個作用)

 

國際化
1、在struts.xml文件中利用常量<constant name="struts.custom.i18n.resources" value="cn.itcast.struts2demo.web.resource.message,cn.itcast.struts2demo.web.resource.resource"/>配置資源文件(cn.itcast.struts2demo.web.resource是包名,後面的message或resource是properities文件名,也包括了resource_zh_CN.properties這樣的文件),可以配置多個,用逗號(,)分割,如果頁面中沒有特別指定,默認採用最後一個,如果默認包中沒有對應信息,則在所有資源包內一一查找。

 

2、如果在資源文件中沒有找到某個key對應信息內容,將直接輸出該key。資源文件裏的key值也可以用{0}{1}這樣的表達式傳遞參數動態生成。

 

3、如果有以ActionClassName爲基準名稱的資源文件,並讓Action繼承ActionSupport類,直接訪問jsp頁面時無法獲取ActionClassName資源文件中的信息,但經過該Action訪問時則可以獲得--攔截器的功效,而且這是strust2讀取資源文件的最高優先級。

 

4、在Action類的源代碼中用可以用ActionSupport類的getText方法獲取國際化資源信息。

 

5、用<s:i18n>標籤來明確指明從哪個資源包中獲取信息。
<s:i18n name="cn.itcast.struts2demo.web.resource.message">
 <s:property value="getText('info.i18ntest','phebe')"/> |
 <s:debug />
</s:i18n>
<s:property value="getText('info.i18ntest')"/>


6、i18n攔截器取request_locale(源碼裏硬編碼聲明的變量)的請求參數表示的locale並存儲進Session,還取Session中的Locale填充ActionContext的Locale。可以利用request_locale實現用戶自行選擇國際化操作界面的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章