Struts2获取表单数据总结

Struts2获取表单数据总结

网站的数据很多都是通过表单来传到后台的(最常见的就是登入界面),所以开发的时候就需要和表单打交道了。恰逢正在学习struts 2,总结下它接收表单数据的几种方法。如有不对,请多指教(。^▽^)

⊙属性封装

⊙模型驱动封装

⊙表达式封装


属性封装

步骤:

1.在action中定义成员变量(变量名必须要和表单的name属性的值一致)。

2.写出(生成)定义的变量的get和set方法【set方法一定要有】。

原理:

Struts 2中内部封装这种操作,只要表单的name值和action中的成员变量名一致,就会将name值赋给对应的变量。

主要代码:

表单
这里写图片描述

loginAction
这里写图片描述

这样你就获得了表单中的内容,你也可输出它们的值与数据库中的值做比较等(uid,upassword中的值现在action后执行之后就被赋上了表单上对应的值)。

这里说一下如何自动生成get和set方法
在代码编辑区域右键,然后就能出现如下界面,按图中操作就可:
这里写图片描述

这里写图片描述

模型驱动封装

步骤:

1.action实现ModelDriven接口

2.实现接口里的getModel方法(获取创建的对象)

3.在action创建实体类对象(前提:表单name值和实体类属性名称一样)

原理:也是Struts 2中内部封装这种操作,具体原理还得去琢磨源码。

关键代码:

Student实体类
 1public class Student {
 2    private String name;
 3    private String grade;
 4    private String number;
 5    public String getName() {
 6        return name;
 7    }
 8    public void setName(String name) {
 9        this.name = name;
10    }
11    public String getGrade() {
12        return grade;
13    }
14    public void setGrade(String grade) {
15        this.grade = grade;
16    }
17    public String getNumber() {
18        return number;
19    }
20    public void setNumber(String number) {
21        this.number = number;
22    }
23}
表单页面
 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    <form action="${pageContext.request.contextPath}/formaction1" method="post">
11        名字:<input name="name" type="text"/></br>
12        年级:<input name="grade" type="text"/></br>
13        学号:<input name="number" type="text"/></br>
14        <input type="submit" value="确定"/>
15    </form>
16</body>
17</html>
formaction1代码
 1import javax.servlet.http.HttpServletRequest;
 2import org.apache.struts2.ServletActionContext;
 3import com.entity.Student;
 4import com.opensymphony.xwork2.ActionSupport;
 5import com.opensymphony.xwork2.ModelDriven;
 6public class FormAction1 extends ActionSupport implements ModelDriven<Student>{
 7    private Student student = new Student();
 8    public Student getModel() {
 9        return student;
10    }
11    public String execute() {
12        System.out.println(student.getName());
13        System.out.println(student.getGrade());
14        return NONE;
15    }
16}

最后控制台就会输出名字和年级了。

表达式封装

步骤:

  1. 在action中声明实体类(只需声明,无需创建)。
  2. 生成(或写出)实体类变量的get和set方法。
  3. 写表单的时候将表单的name值写为表达式形式。

实体类仍使用上面的Student类

formaction2代码:
 1import com.entity.Student;
 2import com.opensymphony.xwork2.ActionSupport;
 3
 4public class FormAction2 extends ActionSupport{
 5    private Student student;
 6    public Student getStudent() {
 7        return student;
 8    }
 9    public void setStudent(Student student) {
10        this.student = student;
11    }
12    public String execute() {
13        System.out.println(student.getName());
14        return NONE;
15    }
16}
表单页代码:
 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    <form action="formaction2" method="post">
11        名字:<input name="student.name" type="text" /></br>
12        年级:<input name="student.grade" type="text"/></br>
13        学号:<input name="student.number" type="text"/></br>
14        <input type="submit" value="确定"/>
15    </form>
16
17</body>
18</html>

然后比较一下表达式封装与模型驱动
相同:两者都能把数据封装到实体类中去。
不同:模型驱动封装在一个Action中只能将表单数据封装到一个实体类对象中去。而表达式封装可在一个Action中将数据封装到多个实体类对象中去。(例如:我可以在表达式封装的action中再引入一个实体类,然后在表单的name属性值中,就写引入的实体类对象中属性名,这样就实现了同时封装到两个不同的实体类对象的操作)

猜你喜欢

转载自blog.csdn.net/weixin_40425481/article/details/80303659