Struts2(二)結果視圖,實體封裝和訪問Servlet的API

一.結果視圖的配置

Action標籤中result標籤的type類型

<action name="customer_*" class="com.cuixiaoming.action.CustomerAction" method="{1}">
    <result name="success" >/jsp/customer/list.jsp</result>
    <result name="addSuccess" type="chain">customer_list</result>
 </action>

結果視圖,簡單來說就是Action運行完成後顯示結果的頁面(廣義上的),可以是靜態頁面,也可以是另一個Action
- dispatcher Action—–請求轉發—->視圖
- redirect Action—–重定向——->視圖
- chain Action——請求轉發—>Action
- redirectAction Action—–重定向——->Action
Action到Action的時候,標籤內寫Action標籤中的name值,比如customer_list

局部結果和全局結果

局部結果:只有當前Action可以訪問的結果,配置在Action標籤內
- <results>
全局結果:該包所有Action都可以訪問的結果,配置在package標籤內,和Action平級,但是要配置在所有Action之前
- <global_results>
- 需要注意的是,當局部結果與全局結果重名時,使用局部結果

二.訪問Servlet的API的三種方式

通過ServletActionContext獲取Servlet相關對象(常用)

request(直接get)
response(直接get)
session(通過requestget)
servletContext(直接get)
- 注意獲取的request是包裝類,response仍然是原來的

通過接口注入的方式獲得Servlet相關對象(需要掌握該方式的思想)

實現ServletRequestAware接口和ServletResponseAware接口
重寫方法,框架自動創建request和response傳入
將他們向上向上抽取,就可以在其他方法中使用他們了

同樣的道理ServletContext也可以獲取到

  • 注入就是set

完全解耦合的方式操作域對象的儲存部分(需要掌握該方式的思想)

用ActionContext.getContext()獲取一個ActionContext
直接put方法操作request範圍的數據
使用getSession()獲取Session範圍的map集合,存數據也是put
使用getApplication()獲取ServletContext範圍的map集合,存數據也是put

三.實體的封裝

ognl表達式 XXX[1].XXX.XXX 類似EL表達式

1.屬性驅動

1.1獲取普通參數

在Action中設置成員變量,提供set方法,Struts2會自動將相應的值賦值給字段

1.2獲取實體對象

在Action中設置對象和其成員變量的成員變量,並提供set方法(如果對象的成員變量大於一個,需要提供get方法,因爲對象成員變量的值需要設置進同一個對象中,所以需要get方法)
在前端表單配置name屬性時,使用對象名.名字
如果對象裏面仍然封裝了對象,不用把裏面的對象在該Action中設置成成員變量(對象的字段全部不用配了,也就是說只把最高層次的設置成Action的成員變量,下面集合也適用)
如果Action設置的是集合,全段表單name屬性,使用 集合名[索引] 的形式

2.模型驅動(平時用的多)

Action實現ModelDriven<模型對象泛型>接口,實現getModel方法.同樣的,也需要將模型對象配置成Action的成員變量,並在後面直接new出來,不需要get/set方法

前端表單的name直接模型對象的成員變量即可

(四)interceptor攔截器

Struts2在運行Action之前和之後都會適用攔截器對功能進行增強,使用的攔截器配置在包繼承的那個配置文件裏面

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