Struts2知識彙總二

Struts2中的調試

在Struts2中可以使用

<s:debug/>

用來查看頁面信息和找錯,可以用來查看但前值棧中的內容

Struts2中的國際化(i18n):

使用i18們需要在struts.xml中寫上

<constant name="struts.custom.i18n.resources" value="global" />

在Struts2中實現國際化,需要新建properties文件,properties文件內容格式爲鍵值對
如下:
key = value
properties文件的命名格式:
bundlename_language_country.properties
bundlename爲資源包名稱:可以爲globa、struts、model等
language爲語言縮寫:zh(中文)、en(英語)、fr(法語)
country爲國家縮寫。
properties文件放在類目錄下,但是不能和類一起放在包裏
Struts2默認使用英文環境
然後使用Struts2提供的標籤設置name,一邊Struts框架找到對應內容替換
properties文件放在類目錄下,框架會默認自動尋找該文件。
可以使用Struts2標籤獲取值:

<s:property value="getText('key')"/>

大多數UI標籤的key屬性可用於從資源束檢索信息

<s:textfield key="some.key" name="textfieldName"/>

i18n標籤會將任意資源束推送到值棧,而i18n標籤內的其他標籤可以顯示來自該資源束的信息:

<s:i18n name="bundle">
     <s:text name="key" />
</s:i18n>
Struts2 類型轉換:

在html中,節手的數據類型默認爲String,而在Struts2中,不需要進行轉換就可以接收多個類型(使用轉換器):
默認轉換器:

Integer,Float,Double,Decimal
Date,Datetime
Arrays,Collections
Enumerations
Boolean
BigDecimal

如果類中有自己定義的對象實例,取出對象實例則顯示默認調用toString()
這時不要覆寫toString()方法
因爲Struts2默認調用toString,如果直接覆寫toString()方法,實例裏的屬性就會丟失。
(猜測:可能是因爲框架檢查代碼,沒有發現有將數據從值棧取出的操作,所以判斷數據沒有使用到,就直接將過程優化,不將值放入值棧,所以就取不到了)
這裏就需要使用struts2提供的轉換器:
(需要創建一個新的類,繼承自StrutsTypeConverter):
覆寫兩個方法:

public Object convertFromString(Map map, String[] strings, Class type) {
//從字符串到對象轉換,數據在strigs裏,返回一個對象

}
public String convertToString(Map map, Object o) {
//將對象變爲字符串,對象爲o,需要強制轉換
}

創建完新的轉換器,還需要註冊(在類目錄下,新建一個properties文件):

xwork-conversion.properties

//內容
('被轉換類路徑') = ('轉換器類路徑')

//例
com.echo.some.SomeThing = com.echo.converter.SomeThingConverter

使用該命名的文件可以保證轉換器全局可用。

Struts2 主題和模板和標籤:

標籤:
Struts2中的標籤由Struts框架提供,運行時會替換擴展成html代碼
例如:

//struts2標籤
<s:textfield name="name" label="Name" />
//轉化爲
<tr>
<td class="tdLabel">
   <label for="name" class="label">Name:</label>
</td><td>
   <input type="text" name="name" value="" id="name"/>
</td>
</tr>

表單輸入標籤屬性id默認爲:表單id_屬性名
如果標籤屬性沒有賦值,則框架會默認從其他屬性或者父標籤獲得默認值
如id和name屬性

模板:
一些標籤和合集,主要表示寫在freemarker上,可複用的模板
主題:
一系列模板組成一個主題

Struts2中的內置主題:

simple theme:基本和普通html一樣
xhtml theme:框架默認主題,增加了一些小功能和佈局調整,基於html的兩列表格佈局
css_xhtml theme:同上,增加了css樣式,基於css的兩列表格佈局

全局主題設置:

struts.properties文件中的struts.ui.theme的屬性(默認爲xhtml)
struts.ui還有其它屬性可以設置

也可以使用部分標籤的theme屬性單獨設置

也可以自定義主題:

struts2-core-x.y.z.jar/template

複製該目錄下的主題到類目錄下當作模板,修改內容
然後在struts.xml中添加以下內容:

//目錄名
struts.ui.theme=
//父目錄
struts.ui.templateDir=
struts.ui.templateSuffix=ftl
Struts2中異常應對:

當發生再代碼中發生未知異常時,爲了保證用戶體驗,可以使用Struts2提供的異常處理機制來保證發生異常時跳轉到界面友好的頁面而不是跳轉到錯誤信息頁面。
Struts2提供攔截器來攔截來自action類的異常,並將action的result結果設置爲error返回,使action繼續正常運行,所以每個action都要確保有一個error結果的頁面。
在struts.xml中添加語句:
如下所示,爲空指針異常處理:
如果處理其他異常,只需要修改 “java.lang.NullPointerException” 字段即可。

<global-exception-mappings>
	<exception-mapping exception="java.lang.NullPointerException" result="error" />
</global-exception-mappings>
Struts2中的註釋(慎用):

通過使用Struts2中提供的註釋,可以不需要配置struts.xml
@Results:結果集必須寫在類和包聲明之間用({})包圍@Result結果項:

@Results({
		@Result(name = "success",location = "/success.jsp"),
		@Result(name = "error",location = "/error.jsp")
})

@Action(value="/action"):規定Action請求的URL,必須寫在execute方法上面:

@Action(value="/action")
public String execute() {
	return SUCCESS;
}

驗證註釋:
驗證註釋有多個類型,都必須寫在屬性的getter上面:
@RequiredFieldValidator( message = “” ):不能爲空
@IntRangeFieldValidator(message = “”, min = “”, max = “”):int類型結果範圍驗證
其他驗證註釋可查看文檔
如果同時在struts.xml文件和Action類中聲明驗證註釋,則註釋都會生效。

爲什麼說註釋慎用?
如果項目規模不大,那麼其實無所謂使用註釋或者是xml配置,如果項目變得龐大,action類的數量倍增,如果在action類裏大量使用這種註釋會使代碼維護性變差,特別是在重構的時候,如果項目目錄結構需要發生變化、action名稱需要發生變化,調整註釋則是一件相當困難的事情,如果所有信息統一使用xml配置,則會使調整變得容易。

Struts2標籤(部分):

if、else、elseif標籤可以直接獲取值棧信息

<s:if test="age <= 10">
   <p>age is smaller than 10</p>
</s:if>
<s:elseif test="age <= 20 ">
   <p>age is smaller than 20</p>
</s:elseif>
<s:else>
    <p>age is bigger than 20</p>
</s:else>

迭代器:
其中list可以是java.util.Collection,java.util.Iterator

<s:iterator value="list">
  <p>item is: <s:property/></p>
</s:iterator>

其他標槍詳見文檔。

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