Struts2的頁面參數獲取

Struts2的頁面參數獲取

在學習Servlet的過程中,我們可以實現前後臺的連接和傳值。框架的存在就是爲了方便我們進行開發,簡化我們的開發流程,讓我們可以少寫一些代碼就能實現某些功能。那麼在Struts2框架中,我們有很多種的方法區獲取參數,以下我以一個繼承了ActionSupport類的子類爲例子。在這個類中,我們可以通過servlet獲取參數、也可以通過ActionContext獲取、通過在Struts2中常用的模型驅動獲取、表達式封裝、屬性封裝獲取以及域模型獲取。

1.使用Servlet時,我們需要先獲取request對象,然後才能通過request對象獲取請求中的參數值。獲取request對象的代碼如下:
HTTPServletRequest request = ServletActionContext.getRequest();

Servlet與Action的區別在於Servlet是多例的對象,而Servlet是單例的對象。在Action中,每個請求都會創建一個ActionContext對象,所以Action是線程安全的。在Action類中,可以存在成員變量,而在Servlet中一般不會定義成員變量,因爲可能會出現線程安全的問題。

2.使用ActionContext獲取請求參數如下所示:
1° 先獲取ActionContext對象 ActionContext context = ActionContext.getContext();
2° 通過Map集合接收所有的參數 ·Map params = context.getParameters();·
3° 獲取參數值組成的數組(因爲有多選框的存在,所以參數值是一個數組類型) String values = (String[]) params.get("參數名");

3.通過模型驅動封裝
1° 讓這個Action類實現ModelDriven接口,並且在Action類中聲明相應的成員變量,這個變量是自定義的實體類。
2° 實現接口中的getModel()方法,返回相對應的實體類對象
3° 在Action類中,創建實體類對象,數據會自動封裝到這個實體類對象中去

4.通過表達式封裝獲取
1° 在action類聲明實體類
2° 生成實體類變量的set/get方法
3° 在表單輸入項的name屬性值裏面寫表達式形式(輸入框的name屬性值爲對象.成員變量,例如 name="user.userName")

5.在使用屬性封裝時,我們可以把這個Action當成我們常用的自定義類型,併爲這個類中的成員變量提供相應的set/get方法,此時我們需要保證前端頁面輸入框的name屬性值和我們在Action類中聲明的成員變量名稱一致。但是此種方式不能直接把頁面中的數據值直接封裝到我們的實體類對象中去,需要我們自己手動的爲實體類對象賦值。如果我們同時使用了屬性封裝和模型驅動封裝去獲取同一個表單得數據,那麼只會執行模型驅動封裝,而不會執行屬性封裝。

表達式封裝和模型驅動封裝的比較

相同點:他們都可以將數據封裝到實體類對象當中去
不同點:模型驅動封裝只能把數據封裝到一個實體類對象當中去,因爲getModel()方法只會返回一個實體類的對象;而表達式封裝則可以把數據封裝到不同的實體類對象裏面。

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