Action接收參數
- 2019 年 10 月 10 日
- 筆記
Action接收參數
- 簡述
- 接收參數
- 方法一
- 方法二
- 方法三
- 封裝集合
- 傳遞錯誤
01
簡述
請求的各種信息參數都是在request對象中,不使用Servlet原生API怎麼獲取參數呢,Struts2中提供了三種方式(當然原理他還是通過request)
02
方法一
屬性封裝
直接在Action類中定義與url傳入的參數相對應的變量,並設置上set方法,當此url代參數請求後,Action類中對應的變量也就得到了參數的值,這種方法只是在參數少的時候使用並且不能自動封裝,當參數多時你需要把這些參數封裝在一個對象時需要自己手動去做



03
方法二
表達式封裝
創建若干參數形成的對象,Action中直接獲取到對象,參數名為「對象名.屬性名」對象名對應Action中的,也是需要設置上set方法因為它內部是用反射來獲取的。它會自動把名為student.name和student.age的兩個參數封裝在student對象中並通過點後的字符來匹配對應的類中屬性
創建對象

表單傳參

Action得到對象

04
方法三
模型驅動的方式
需要實現ModelDrivern接口並覆蓋getModel方法,需要手動開闢一個對象給它,它去把參數封裝在此對象再返回
ModelDrivern接口

表單傳入(name、age)

模板類

action獲取

05
封裝成集合
封裝成列表
通過中括號中的數字來確定是集合中哪個元素(對象),最後再封裝在元素中。中括號中就是集合元素的角標。像下面提交後集合會有3個元素第一個也就是角標為0的沒有值為空


封裝成Map
在中括號的地方自定義key即可


06
接收參數錯誤
在頁面中所有參數值都是字符串的顯示,Struts會去自動轉化類型。但當你在瀏覽器提交的參數值與模板類的類型轉化不了就會出錯,並返回input
下面由於student類中定義的age是Integer類型,傳入a這樣的字符無法轉為整型所以出錯,返回input。結果頁沒有配置input所以出現未找到



原理
在struts-default.xml中配置了很多攔截器,只要攔截器中處理出現問題錯誤信息就會存在錯誤信息區,直到最後workflow回去檢錯誤信息區有沒有內容如果有就返回input,可以區配置一下input結果頁。出錯時跳轉到相應的頁面


