Struts2 封装获取表单数据的四种方式

三种封装数据的方式:

  1. 使用原始方式获取表单封装到实体类对象
  2. 属性封装
  3. 模型驱动封装(重点)
  4. 表达式封装(会用即可

原始方式:

form1.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Insert title here</title>
</head>

<body>
<%--${pageContext.request.contextPath}是JSP取得绝对路径的方法等价于request.getContextPath()
<%--也就是取出部署的应用程序名或者是当前的项目名称--%>
    <form action="${pageContext.request.contextPath}/form4.action"method="post" >
        username: <input type="text" name="username"/>
        <br/>
        password:<input type="text" name="password"/>
        <br/>
        address:<input type="text" name="address"/>
        <br/>
        <input type="submit" value="提交" />
    </form>
</body>
</html>

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="demo02" extends="struts-default" namespace="/">
	<action name="form4" class="form.form4DemoAction" ></action>
</package>
</struts>

form4DemoAction:

package form;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import emtity.User;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;

/*
    使用 ServletActionContext 获取表单数据封装到实体类对象里面
    @author asus
*/
public class form4DemoAction extends ActionSupport {

    public String execute() throws Exception {
        //1.获取表单数据
        //javax.servlet.http.HttpServletRequest:HTTPservlet请求对象
        HttpServletRequest request = ServletActionContext.getRequest();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String address = request.getParameter("address");
        
        //封装到实体类对象里面
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setAddress(address);
        System.out.println(user);
        return Action.NONE;
    }
}

User实体类:

package emtity;

public class User {
    private String username;
    private String password;
    private String address;

    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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}



属性封装

  1. 直接把表单提交属性封装到 action 的属性里面
  2. 实现步骤:
    (1) 在 action 成员变量位置定义变量。
      变量名称和表单输入项的 name 属性值一样。
    (2) 生成变量的 set 和 get 方法都写出来
    (3)使用属性封装获取表单到属性里面,不能把数据直接封装到实体类对象里面。

DataDemo01

package data;

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

public class DataDemo01 extends ActionSupport {
    //定义变量
    //变量的名称和表单输入项 name 属性值一样
    private String username;
    private String password;
    private String address;

    //生成变量的 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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(username+":"+password+":"+address);
        return NONE;
    }
}

data.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/data1.action"method="post" >

        username: <input type="text" name="username"/>
        <br/>
        password:<input type="text" name="password"/>
        <br/>
        address:<input type="text" name="address"/>
        <br/>
    	<input type="submit" value="提交" />
</form>
</body>
</html>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="demo02" extends="struts-default" namespace="/">
		<action name="data1" class="data.DataDemo01" ></action>
	</package>
</struts>


模型驱动封装(重点)

  1. 使用模型驱动方式,可以直接把表达那数据封装到实体类对象里面
  2. 实现步骤
    (1) action 实现接口 ModeDriven
    (2) 实现接口里面的方法 getModel方法
     -把创建对象返回
    (3) 在 action 里面创建实体类对象。

User实体类对象:

package emtity;

public class User {
    private String username;
    private String password;
    private String address;

    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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

DataDemo02:

  • action 实现接口 ModeDriven
  • 实现接口里面的方法 getModel方法
    • 把创建对象返回
  • 在 action 里面创建实体类对象。
package data;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import emtity.User;
/*
    模型驱动封装
*/
public class DataDemo02 extends ActionSupport implements ModelDriven<User> {

    //创建对象
    //前提要求:表单输入项 name 属性值和实体类属性名称一样
    private   User user = new User();

    @Override
    public User getModel() {
        //返回创建 user 对象
        return user;
    }

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

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="demo02" extends="struts-default" namespace="/">
	 	<action name="data2" class="data.DataDemo02" ></action>
    </package>
</struts>

data2.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/data2.action "method="post">

    username<input type="text" name="username"/>
    <br>
    password<input type="text" name="password"/>
    <br>
    address<input type="text" name="address"/>
    <br>
    <input type="submit" value="提交"/>
</form>>
</body>
</html>

使用模型驱动前提要求表单输入项 name 属性值和实体类属性名称一样

使用模型驱动和属性封装应注意得问题:

  在一个 action 中,获取表单数据可以属性封装,使用模型驱动封装,不能同时使用属性封装和模型驱动封装获取同一个表单数据。如果同时使用,之后执行模型驱动封装



表达式封装(会用即可)

  1. 使用表达式封装可以把表单数据封装到实体类对象里面
     第一步: 在 action 里面声明实体类
     第二步:生成实体类变量的 set 和 get 方法
     第三步:在表单输入项的 name 属性值里面写表达式形式

User实体类:

package emtity;

public class User {
    private String username;
    private String password;
    private String address;

    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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

DataDemo03:

  • 第一步: 在 action 里面声明实体类
  • 第二步:生成实体类变量的 set 和 get 方法
package data;

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

public class DataDemo03 extends ActionSupport {
    //声明实体类
    private User user;
    //生成实体类变量的 set和 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;
    }
}

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 	<package name="demo02" extends="struts-default" namespace="/">
 		<action name="data3" class="data.DataDemo03"></action>
    </package>
</struts>

data3.jsp:

  • 第三步:在表单输入项的 name 属性值里面写表达式形式
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form  action="${pageContext.request.contextPath}/data3.action"  method="post">
    username<input type="text" name="user.username" />
    <br/>
    password<input type="text" name="user.password" />
    <br/>
    address<input type="text" name="user.address" />
    <br/>
    <input type="submit" value="提交" />
</form>
</body>
</html>

表达式封装和模型驱动封装比较:

  • 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面
  • 两者之间得的异同:
    •  (1)使用模型驱动只能把数据封装到一个实体类对象里面
      
    •      在一个 action 里面不能使用模型驱动把数据封装到不同的实体类对象里面
      
    •  (2)使用表达式封装可以把数据封装到不同的实体类对象里面
      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值