Action接收參數

  • 2019 年 10 月 10 日
  • 筆記

Action接收參數

  1. 簡述
  2. 接收參數
    • 方法一
    • 方法二
    • 方法三
  3. 封裝集合
  4. 傳遞錯誤

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結果頁。出錯時跳轉到相應的頁面