Struts2的数据封装

Struts2框架是一个web层的框架,web层的框架是一个软件的半成品,提供了数据封装的基本的功能.

属性驱动的数据封装

  • 属性驱动:提供属性set方法的封装

jsp页面

<h3>方式一:属性驱动-提供set的方法的方式</h3>
<form action=" ${ pageContext.request.contextPath}/userAction1.action" method="post">
    用户名:    <input type="text" name="username"/><br/>
    密码:      <input type="password" name="password"/><br/>
    年龄:      <input type="text" name="age"/><br/>
    生日:      <input type="text" name="birthday"/><br/>
    工资:      <input type="text" name="salary"/><br/>
    <input type="submit" value="提交"/>
</form>

action页面

action页面中需要提供所有被封装的数据的set方法

这种方法并不是很好,因为如果存在多属性封装,那么就需要书写多个set方法

package demo2;

import com.opensymphony.xwork2.ActionSupport;

import java.util.Date;

/**
 * 数据封装方式一:提供属性的set方法的方式
 */
public class UserAction1 extends ActionSupport {
    //提供了对应的属性
    private String username;
    private String password;
    private Integer age;
    private Date birthday;
    private Double salary;
    //提供对应的set方法

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    @Override
    public String execute() throws Exception {
        //接收数据;
        System.out.println(username);
        System.out.println(password);
        System.out.println(age);
        System.out.println(salary);
        System.out.println(birthday);

        //封装数据;
        return NONE;
    }
}
  • 属性驱动:在页面中提供表达式

属性驱动的方法,主要需要在jsp页面中配置

jsp页面的书写

注意,需要在属性前面写上属性所属对象,user.username

<h3>方式二:属性驱动-在页面中提供表达式</h3>
<form action=" ${ pageContext.request.contextPath}/userAction2.action" method="post">
    用户名:    <input type="text" name="user.username"/><br/>
    密码:      <input type="password" name="user.password"/><br/>
    年龄:      <input type="text" name="user.age"/><br/>
    生日:      <input type="text" name="user.birthday"/><br/>
    工资:      <input type="text" name="user.salary"/><br/>
    <input type="submit" value="提交"/>
</form>

action页面的书写

action页面书写的时候,首先需要创建封装对象的实例,然后需要在action中创建需要封装对象的Getter And Setter,该方法与action的关系不大,主要是依靠jsp页面,以及前端控制器,在action方法之中一定要写上get的方法,这样前端控制器才可以取到在action页面中的private的需要封装的对象。

package demo2;

import com.opensymphony.xwork2.ActionSupport;
import domain.User;

/**
 * 数据封装的方式二 属性驱动 在页面中提供表达式
 */
public class UserAction2 extends ActionSupport {
    //提供一个私有的对象
    private User user = new User();
    //提供User的set和get方法,必须要提供get方法

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(user);
        return NONE;
    }
}

使用表达式的方法可以同时向多个对象进行数据的封装

模型驱动的数据封装

模型驱动的方式是最常用的方式,缺点在于同时只能向一个对象中封装数据

jsp页面的书写

注意,在模型驱动的数据封装之中与jsp的页面关系不大,与set方法的封装方式一样

<h3>方式三:模型驱动-采用模型驱动的方式</h3>
<form action=" ${ pageContext.request.contextPath}/userAction3.action" method="post">
    用户名:    <input type="text" name="username"/><br/>
    密码:      <input type="password" name="password"/><br/>
    年龄:      <input type="text" name="age"/><br/>
    生日:      <input type="text" name="birthday"/><br/>
    工资:      <input type="text" name="salary"/><br/>
    <input type="submit" value="提交"/>
</form>

action页面的书写

action页面中,首先要实现ModelDriven< User >接口,注意接口要实现被封装对象的泛型,然后需要手动提供对象的实例。然后需要实现接口的getModel的方法

package demo2;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import domain.User;

/**
 * 数据封装的方式三 模型驱动的方式封装数据
 */
public class UserAction3 extends ActionSupport implements ModelDriven<User> {

    //模型驱动使用的对象,必须手动提供对象的实例
    private User user = new User();

    //模型驱动需要制定的方法
    @Override
    public User getModel() {
        return user;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(user);
        return NONE;
    }
}

原文地址:https://www.cnblogs.com/limushu/p/10063087.html