1. 程式人生 > >十一 三種Struts2的資料封裝方式

十一 三種Struts2的資料封裝方式

Struts2的資料封裝:Struts2是一個web層框架,框架是軟體的半成品。提供了資料封裝的基本功能。

屬性驅動:提供屬性set方法的方式

這種方式很少用,除非資料少,需要在Action類裡自己往物件裡封裝

前端jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <h1>Struts2的資料封裝</h1> 11 <h3>方式一:屬性驅動:提供Set方法的方式</h3> 12 <form action="${pageContext.request.contextPath }/userAction1.action"
method="post"> 13 使用者名稱:<input type="text" name="username"><br/> 14 密碼:<input type="password" name="password"><br/> 15 年齡:<input type="text" name="age"><br/> 16 生日:<input type="text" name="birthday"><br/> 17 工資:<input type="text" name="salary"><
br/> 18 <input type="submit" value="提交"> 19 </form> 20 </body> 21 </html>

實體類User:

package com.itheima.struts2.domain;
/**
 * 實體物件
 */
import java.util.Date;

public class User {
   private String username;
   private String password;
   private int age;
   private Date birthday;
   private Double salary;

public void setUsername(String username) {
    this.username = username;
}
public void setPassword(String password) {
    this.password = password;
}
public void setAge(int age) {
    this.age = age;
}
public void setBirthday(Date birthday) {
    this.birthday = birthday;
}
public void setSalary(Double salary) {
    this.salary = salary;
}
   
@Override
public String toString() {
    return "User [username=" + username + ", password=" + password + ", age=" + age + ", birthday=" + birthday
            + ", salary=" + salary + "]";
}
   }

Action類:

 1 package com.itheima.struts2.demo2;
 2 
 3 import java.util.Date;
 4 
 5 import com.itheima.struts2.domain.User;
 6 import com.opensymphony.xwork2.ActionSupport;
 7 /**
 8  * 資料封裝的方式一:屬性封裝
 9  *
10  */
11 public class UserAction1 extends ActionSupport {
12    private String username;
13    private String password;
14    private Integer age;
15    private Date birthday;
16    private Double salary;
17    
18     
19 public void setUsername(String username) {
20     this.username = username;
21 }
22 
23 
24 public void setPassword(String password) {
25     this.password = password;
26 }
27 
28 
29 public void setAge(Integer age) {
30     this.age = age;
31 }
32 
33 
34 public void setBirthday(Date birthday) {
35     this.birthday = birthday;
36 }
37 
38 
39 public void setSalary(Double salary) {
40     this.salary = salary;
41 }
42 
43 
44     public String execute() throws Exception{
45        //接收資料
46         System.out.println(username);
47         System.out.println(password);
48         System.out.println(age);
49         System.out.println(birthday);
50         System.out.println(salary);
51        //封裝資料
52         User user = new User();
53         user.setAge(age);
54         user.setUsername(username);
55         user.setBirthday(birthday);
56         user.setSalary(salary);
57         
58        return NONE;
59    }
60 }

 

屬性驅動:提供頁面表示式的方式

前端JSP:name屬性前加上實體類的物件字首,如:user.password

 

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 <h1>Struts2的資料封裝</h1>
11 <h3>方式二:屬性驅動:提供頁面表示式方式</h3>
12 <form action="${pageContext.request.contextPath }/userAction2.action" method="post">
13 使用者名稱:<input type="text" name="user.username"><br/>
14 密碼:<input type="password" name="user.password"><br/>
15 年齡:<input type="text" name="user.age"><br/>
16 生日:<input type="text" name="user.birthday"><br/>
17 工資:<input type="text" name="user.salary"><br/>
18 <input type="submit" value="提交">
19 </form>
20 </body>
21 </html>

Action類:相較而言,這種直接封裝物件,而不是操作屬性的方式,比較簡約

package com.itheima.struts2.demo2;

import com.itheima.struts2.domain.User;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 資料封裝方式二:屬性驅動
 * @author 李騰
 *
 */
public class UserAction2 extends ActionSupport {
    //提供一個User物件,在前端頁面的name屬性上加上user字首
    private User user;
    //提供user的get和set方法,一定要提供get方法
    //因為攔截器提供物件的封裝,需要建立User物件,前提是前端屬性名字的字首和類一樣
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    
    
    public String execute() throws Exception{
        System.out.println(user);
        return NONE;
    }

}

 

模型驅動:採用模型驅動的方式(最常用)

Action類實現ModelDriven介面,重寫getModel方法,返回實體物件

缺點:只能想一個物件(比如user)中封裝物件。而頁面表示式可以向多個物件封裝(只需改變name屬性的字首如student.username user.username )

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 <h1>Struts2的資料封裝</h1>
11 <h3>方式三:模型驅動方式</h3>
12 <form action="${pageContext.request.contextPath }/userAction3.action" method="post">
13 使用者名稱:<input type="text" name="username"><br/>
14 密碼:<input type="password" name="password"><br/>
15 年齡:<input type="text" name="age"><br/>
16 生日:<input type="text" name="birthday"><br/>
17 工資:<input type="text" name="salary"><br/>
18 <input type="submit" value="提交">
19 </form>
20 </body>
21 </html>

Action類:

package com.itheima.struts2.demo2;

import com.itheima.struts2.domain.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
 * 資料封裝方式三:模型驅動  最常用的方式,缺點:只能同時向一個物件中封裝資料
 *          二:向多個數據封裝中同時封裝資料
 * @author 李騰
 *
 */
public class UserAction3 extends ActionSupport  implements ModelDriven<User>{
    //前提:手動例項化User
    private User user = new User();
    
    //模型驅動需要使用的方法
    @Override
    public User getModel() {
        return user;
    }
    
    public String execute() throws Exception{
        System.out.println(user);
        return NONE;
    }



}