Struts2框架封裝數據(接收頁面參數)


主要解決的問題:是在action中如果獲取請求參數

  Struts 2框架會將表單的參數以同名的方式設置給對應Action的屬性中。該工作主要是由Parameters攔截器做的。而該攔截器中已經自動的實現了String到基本數據類型之間的轉換工作。

通過簡單的登錄案例驅動式來進行分析:

需求分析

 

1.屬性驅動

a.action中定義屬性,屬性名稱必須與頁面標簽中name屬性名稱一致;然后,為定義的屬性提供get/set方法。簡單說,直接在action類中提供與請求參數匹配屬性,提供get/set方法

(1)jsp頁面代碼

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>屬性驅動模式接受頁面參數</title>

</head>

<body>

<form action="${pageContext.request.contextPath}/login" method="post"> 

用戶:<input type="text" name="username" /><br/>

密碼:<input type="password" name="password" /><br/>

<input type="submit"  value="提交"/>

</form>

</body>

</html>

(2)Action類代碼

package cn.struts.demo_show;

public class LoginAction {

 

// 屬性名稱必須和頁面參數名稱一致

private String username;

private String password;

 

// 為所有屬性提set/get方法

public String getUsername() {

return username;

}

 

public void setUsername(String username) {

this.username = username;

}

 

public String getPassword() {

return password;

}

 

public void setPassword(String password) {

this.password = password;

}

 

// 測試接受頁面參數的方法

public void login() {

System.out.println("action執行了");

System.out.println("頁面輸入用戶名為:" + username + "頁面輸入密碼為:" + password);

}

}

 

 (3) struts.xml配置

 

(4)執行結果

 

此外,屬性驅動還可以,通過javabean的方式獲取頁面參數。

action類中創始一個javaBean,對其提供get/set ; action類中定義javabean對象的屬性,同時創建該對象的set/get方法;在請求時頁面上要進行修改,例如 user.username  user.password ,要使用ognl表達式

(1)封裝模型對象:將頁面參數封裝到一個模型對象中。

 

(2)Action中定義模型對象的屬性,並提供get/set方法。

 

以上兩種方式的優缺點:

第一種比較簡單,在實際操作我們需要將action的屬性在賦值給模型(javaBean) 去操作
第二種:不需要在直接將值給javaBean過程,因為直接將數據封裝到了javaBean 中。它要求在頁面上必須使用ognl表達式,就存在頁面不通用問題。

2.模型驅動(推薦)

實現步驟:

1.創建頁面參數的javabean實體對象

2.Action類要實現一個指定接口ModelDriven<T>

3.實例化模型對象(就是要new出來javaBean)

4.重寫getModel方法(接口中的方法)將實例化的模型對象返回。

對於模型驅動它與屬性驅動對比,在實際開發中使用比較多,模型驅動缺點,它只能對一個模型對象數據進行封裝。

案列演示:

(1)前段頁面使用之前的演示頁面

(2)頁面參數的封裝

package cn.struts.demo_show;
public class User {   private String username;   private String password;   public String getUsername() {     return username;   }   public void setUsername(String username) {        this.username = username;   }   public String getPassword() {     return password;   }   public void setPassword(String password) {     this.password = password;   } }

 

 

(3)Action中,類實現ModelDriven<T>

package cn.struts.demo_show;


import com.opensymphony.xwork2.ModelDriven;


//1.action類實現ModelDriven接口

public class LoginAction implements ModelDriven<User> {

// 2.實例化模型對象

private User user = new User();


// 3.重寫接口中getModel方法,並返回模型對象

@Override

public User getModel() {

return user;

}


// 測試接受頁面參數的方法

public void login() {

System.out.println("action執行了");

System.out.println("頁面輸入用戶名為:" + user.getUsername() + "頁面輸入密碼為:" + user.getPassword());

}

}

 

總結:

在實際的開發應用中,一般使用模型驅動方式較多。簡單說,使用模型驅動,整個執行流程更清晰;其次在代碼更簡單,閱讀性更高。其次,也會使用屬性驅動模式,來實現簡單的頁面參數的接受。

通常情況下,如果頁面表單的name屬性和實體類中的屬性名稱不是一一對應的話,那么就應該使用屬性驅動;相反,如果與之對應,那么可以使用模型驅動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM