十一 三种Struts2的数据封装方式

Posted ltfxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十一 三种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;
    }



}

 






以上是关于十一 三种Struts2的数据封装方式的主要内容,如果未能解决你的问题,请参考以下文章

深入分析JavaWeb 45 -- Struts2封装请求参数与类型转换

3.struts2接收页面传参的三种方式

深入分析JavaWeb 45 -- Struts2封装请求参数与类型转换

深入分析JavaWeb 45 -- Struts2封装请求参数与类型转换

Struts2封装获取表单数据方式:

struts2 封装获取表单数据的方式