Struts2數據操作(第二例)
在action中對數據進行操作
1:結果頁面的配置
1.result標簽配置action方法的返回值到不同的路徑裏面
2.創建兩個action,都執行默認的方法execute方法,讓兩個action方法都返回success,返回success後配置到同一個頁面·
弊端:結果頁面都一樣,返回值都一樣,但是太浪費了,於是我們引入了全局頁面
(1)全局結果頁面
如果說多個action,方法裏面返回值相同的,到頁面也是相同的,這個時候用全局頁面
(2)局部結果頁面
1》即配置了全局頁面,有配置了局部頁面,以局部頁面為準
(3)result標簽 的type屬性
1》result標簽裏面除了
(1)type屬性:如何到路徑中去(轉發還是重定向)
2》type屬性值
(1)默認值,做轉發操作,值是dispatcher
(2)做重定向操作,值是 redirect
這兩個值是針對頁面的配置,配置到其他的action裏面
-chain:轉發到action,一般不用,緩存問題
-redirectAction:重定向到action
2:在action獲取表單提交數據
1:之前在web階段,提交表單到servlet裏面,在servlet裏面使用request對象裏面的方法獲取
getParameter,getParamterMap
2:提交表單到
3:action獲取表單數據,如下;
(1)使用ActionContext類獲取
因為方法不是靜態的,所以要創建ActionContext對象
這個方法對象不是new出來的
具體做個演示
(1)創建表單,提交表單到action裏面
(2)在action使用ContextAction獲取數據,獲得request方法
(2)使用ServletActionContext獲取
可以調用類裏面的靜態方法,
HttpServletRequest request=ServletActionContext.getRequest();
String username=request.getParameter("username");
String password=request.getParameter("password");
String address=request.getParameter("address");
(3)使用接口註入方式獲取(一般不用)
1:讓action實現一個借口,得到一個request對象
1:在action操作域對象:request,session,servletcontext:2:
2:使用ServletActionContext類操作
3:struts提供獲取表單數據方式
使用最原始的方法封裝實現類對象
(1)屬性封裝
直接把表單提交的數據封裝到action的屬性裏面
實現步驟:
在action成員變量位置定義變量
-變量名稱和表單輸入項的name屬性值一樣,這樣就直接通過裏面的名字調用裏面的set方法,設置值
生成變量set方法(把set和get方法寫出來)
3.使用屬性封裝獲取表單數據到屬性裏面,不能把數據直接封裝到實體對象裏面,於是我們用到了模型驅動方式
(2)模型驅動封裝(重點)
直接把數據從表單封裝到一個實體類中去(如users)
實現步驟:
(1)action實現接口 ModelDriven
(2)實現接口的方法getModel方法
-把我們創建的對象返回
3.使用模型驅動和屬性封裝需要註意的問題
(1)在一個action中,獲取表單數據可以屬性封裝,使用模型驅動封裝,不能同時使用屬性封裝和模型驅動封裝獲取同一個表單數據,兩個都用只會執行模型驅動,
3.表達式封裝(會用)
1實現過程
(1)使用表達式封裝可以把表單數據封裝到實體類對象裏面
第一步:在action裏面聲明實體類
第二步:生成實體類變量的set和get方法
第三步 在表單輸入項的name屬性值裏面寫表達式形式
可以把表達式封裝歸類到屬性封裝裏面
比較表達式封裝和模型驅動
1:使用表達式封裝和模型封裝都可以把數據封裝到實體類對象裏面
2.不同點
(1)使用模型驅動只能把數據封裝到一個實體類對象裏面。在一個action裏面不能使用模型驅
動把數據封裝到不同的實體類對象裏面
(2)使用表達式可以把數據封裝到不同的實體類對象裏面
4:struts獲取數據封裝於集合中(會用)
(1)封裝到list集合
第一步 在action聲明list
第二步 生成list變量的get和 set方法
第三步在表單輸入項 裏面寫表達式(第三天會用到s:iterator)
(2)封裝到map中
聲明一個map集合
生成get和set方法
第三步在表單輸入項 裏面寫表達式
Struts2數據操作(第二例)