Result——Struts2的處理結果

        Struts2框架是MVC設計思想的實現,Action就是業務控制器,能夠調用業務邏輯模塊進行業務處理,Action的處理結果是經過在配置文件中設定result屬性來實現的。這是一種典型的鬆耦合方式,Action沒必要關心result對應的視圖是什麼,只是返回一個字符串便可。瀏覽器

1、 處理結果流程框架

Struts2框架攔截用戶請求後,會匹配相關的Action來處理,Action執行處理完畢後,將返回一個標準的字符串,該字符串在配置文件中對應了一個視圖資源名稱。Struts2框架是經過配置文件中的result屬性將Action和視圖資源聯繫在一塊兒的,這樣就實現了獨立模塊化的設計思想。Result對應的視圖資源,就是MVC模式中的視圖部分(View)。jsp

2、 配置result模塊化

1. 配置result的目的就是告訴Struts2框架,在執行完一個Action後,須要系統作什麼。是把一個視圖資源呈現給用戶仍是執行另一個Actionresult配置起到了一個「路標」的做用。編碼

2. result按照做用範圍能夠分爲局部result和全局resultspa

局部result 包含在Action定義中,result屬性是一個Action的子元素。起做用範圍只能在本Action中。插件

全局result 使用<global-results…/>來定義,其做用範圍是全部的Action均可以使用。設計

下面是result的示例:xml

<package name="ch03 " extends="sturts-default " namespace=" /ch03" >ci

<!—定義全局返回類型 -->

<global-results>

<result name="global-result">/welcome.jsp</result>

</global-results>

<action name="Regist" class="ch03.Regist">

<!—定義局部返回類型 -->

<result name="success" type="dispatcher">/ch03/success.jsp</result>

<result name="input">/ch03/regist.jsp</result>

</action>

</package>

3、 result的類型

Struts2框架支持多種視圖技術,例如JSPFreeMarker等。當一個Action執行完用戶請求後,會返回一個標準的字符串,這個字符串就是邏輯視圖名稱,該邏輯視圖名稱並無與任何視圖技術聯繫在一塊兒。視圖技術或者說使用的result類型,是在配置文件中指定的,即指定result元素的type屬性來實現。

Struts2框架默認支持的result類型以下:

chainAction鏈式處理的result類型。

chart:用於整合JfreeChartresult類型。

dispatcher:用於整合JSPresult類型。

freemarker:用於整合FreeMarkerresult類型。

httpheader:用於處理特殊HTTP行爲的result類型。

jasper:用於整合JasperReportresult類型。

jsf 用於整合JSF類型。

redirect:用於重定向的result類型。

redirect-action:用於重定向到其餘Actionresult類型。

stream:用於向瀏覽器返回一個Inputstream

tites:用於整合Tilesresult類型。

velocity:用於整合Velocityresult類型。

xslt:用於整合XML/XSLTresult類型。

plaintext:用於顯示頁面的原始代碼的result類型。

說明:以上是Struts2框架的內建的result類型,都在struts-default.xml中定義的,系統會自動加載該result類型。另一種result類型是採用插件的方式來支持的。

Action-chain類型示例:

<package name="ch03 " extends="sturts-default " >

<!—定義user, result指向Regist Action -->

<action name="user" class="…">

<result type="chain" >Regist</result>

</action>

<action name="Regist" class="…">

<!—連接到另一個命名空間-->

<result type="chain">

<param name="namespace">/secure</param>

<param name="actionName">check</param>

</result>

</action>

</package>

<!—定義包secure,命名空間爲secure -->

<package name="secure " extends="sturts-default " namespace="/secure" >

<action name="check" class="…">

<result>/secure/check.jsp</result>

</action>

</package>

4、 動態配置result

前面介紹的result配置都是以硬編碼的方式保存在struts.xml文件中,實際上,Struts2框架提供了動態配置result的功能。動態配置result是指在struts.xml配置文件中,配置Action中的result時,可使用表達式或通配符來定位視圖資源,經過這種方式,來動態實現返回不一樣的視圖資源。

1. 使用通配符動態配置result

struts.xmlAction配置中,通配符不單單可使用在method配置上,classresult均可以使用通配符。 以下示例:

<package name="ch02" extends="sturts-default " >

<!—通配符配置result -->

<action name="Login_*" class="ch02.Login_{1}">

<result name="success" >/ch02/{1}.jsp</result>

</action>

</package>

如上代碼中使用了通配符,配置了一個名爲Login_*Action,這個Action能夠處

理全部匹配Login_*.action的用戶請求。例如,用戶產生一個URL請求

Login_Bank.actionStruts2框架會先在struts.xml文件中查找是否有名字爲

Login_Bank的配置,若是找不到,則匹配Login_*Action配置,

框架會將ch02.Login_{1}中的{1}匹配爲Bank,即對應ch02.Login_Bank

Action實現類。一樣在result配置中,也會匹配爲/ch02/Bank.jsp的實際視圖資

源。

2. 使用OGNL動態配置result

通常狀況下,若是訪問Action實例中的屬性,可使用${屬性名}表達式,實際上,一個OGNL的完整表達式應該是${屬性名.屬性名.屬性名}。下面的實例演示使用OGNL動態配置result

<package name="ch02" extends="sturts-default " >

<!—使用OGNL表達式配置result-->

<action name="Login_Bank" class="ch02.Login_Bank">

<result name="success" >/ch02/${bankname}.jsp</result>

</action>

</package>

注意: ${bankname}是指Action中的bankname的屬性值,Action實例賦予

bankname不一樣的值,就會指向不一樣的視圖資源。

相關文章
相關標籤/搜索