Struts2获取表单数据

news/2024/11/8 9:47:52/

Struts2获取表单数据

  • Struts2获取表单数据
    • 1、原始Servlet方法
    • 2、属性封装
    • 3、表达式封装
    • 4、模型驱动封装

Struts2获取表单数据

在Struts2中获取表单数据或提交路径的参数值的方式有4种。如下:

  • 原始Servlet方法
  • 属性封装
  • 表达式封装
  • 模型驱动封装

1、原始Servlet方法

该方法一般用于提取url中的参数,如下:

在这里插入图片描述

控制器Action如下:

public class HelloUserAction extends ActionSupport {private static final long serialVersionUID = 1L;public String getMessage() {HttpServletRequest request = ServletActionContext.getRequest();String username = request.getParameter("username");String password = request.getParameter("password");String age = request.getParameter("age");System.out.println(username + "===>" + password + "===>" + age);return SUCCESS;}}

struts.xml中配置如下:

在这里插入图片描述
启动项目,访问a标签链接,页面跳转:

在这里插入图片描述
控制台输出:

在这里插入图片描述

参数接收成功。但是这种方式有不足之处,如下:

  • 获取到的所有数据都是String类型的,需要进行数据类型转换。
  • 获取数据的代码复杂、冗余。

2、属性封装

在Action控制器中定义成员变量,提供set和get方式。需注意的是,必须保证成员变量的名称和input表单中的name属性值或提交路径中的参数名称保持一致,否则无法接收。该方法的不足之处是获取数据的方式比较简单,但是会造成属性过多,Action控制器的代码冗余。

直接修改上面的HelloUserAction控制器,修改后如下:

public class HelloUserAction extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;private Integer age;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 Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getMessage() {System.out.println(username + "===>" + password + "===>" + age);return SUCCESS;}}

控制器中的username,password,age分别对应url中的参数:

在这里插入图片描述
启动项目,点击a标签链接,控制台输出如下:

在这里插入图片描述

参数接收成功。下面将a标签链接中的参数改为form表单提交:

     <form action="user/helloUser.action" method="post"><div><label>用户名:</label><input type="text" name="username" /></div><div><label>密码:</label><input type="password" name="password" /></div><div><label>性别:</label><input type="radio" name="sex" value="1" /><input type="radio" name="sex" value="0" /></div><div><label>年龄:</label><input type="text" name="age" /></div><div><input type="submit" value="提交" /></div></form>

修改后的HelloUserAction:

public class HelloUserAction extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;private Integer age;private Integer sex;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 Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}public String getMessage() {System.out.println(username + "===>" + password + "===>" + age + "===>" + sex);return SUCCESS;}}

启动项目,填写表单提交:

在这里插入图片描述
控制台输出:

在这里插入图片描述
参数接收成功。

3、表达式封装

使用表达式封装的方式获取表单数据,步骤如下:

  • 在控制器中定义类类型成员变量,并且提供get和set方法。
  • 页面中使用对象.属性名。

修改页面中form表单的name属性值,如下:

     <form action="user/helloUser.action" method="post"><div><label>用户名:</label><input type="text" name="user.username" /></div><div><label>密码:</label><input type="password" name="user.password" /></div><div><label>性别:</label><input type="radio" name="user.sex" value="1" /><input type="radio" name="user.sex" value="0" /></div><div><label>年龄:</label><input type="text" name="user.age" /></div><div><input type="submit" value="提交" /></div></form>

修改后的HelloUserAction:

public class HelloUserAction extends ActionSupport {private static final long serialVersionUID = 1L;private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String getMessage() {System.out.println(user.toString());return SUCCESS;}}

对应的User类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private String username;private String password;private Integer sex;private Integer age;}

启动项目,填写表单后提交,控制台输出如下:

在这里插入图片描述
参数接收成功。

4、模型驱动封装

需要Action控制器实现ModelDriven接口,并且重写getModel()方法。

com.opensymphony.xwork2.ModelDriven接口源码如下:

在这里插入图片描述

只有一个getModel()方法,实现此接口需要重写这个方法。

修改后的HelloUserAction:

public class HelloUserAction extends ActionSupport implements ModelDriven<User> {private static final long serialVersionUID = 1L;private User user = new User();@Overridepublic User getModel() {return user;}public String getMessage() {System.out.println(user.toString());return SUCCESS;}}

修改后的form表单name属性:

在这里插入图片描述
启动项目,填写表单提交,控制台输出:

在这里插入图片描述
参数接收成功,模型驱动相当于将属性都做了一层封装。

注意:

  • input标签的name属性值、提交路径的参数名称必须与实体类的属性相同,控制器不需要提供模型对象的set和get方法。
  • 模型驱动封装与属性封装一起使用时,同名优先使用模型驱动封装,属性封装无法获取数据。

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

  • 共同点:使用表达式封装和模型驱动封装都可以把数据封装到实体类对象中。
  • 不同点:使用模型驱动封装只能把数据封装到一个实体类对象里面。在一个Action里面不能使用模型驱动把数据封装到不同的实体类对象中。使用表达式封装可以把数据封装到不同的实体类对象中。

http://www.ppmy.cn/news/9944.html

相关文章

FME对调查云平台完成变更调查照片的批量迁移

目录 前言 二、实际步骤 1.准备基础数据 2.模拟登录 3.获取图斑标识码 4.获取图形信息 5.通过空间位置关系过滤不合格照片 5.通过深度学习模型过滤照片特征错误图斑 6.照片迁移 总结 前言 又到了一年一度国土变更调查的苦日子&#xff0c;因为项目规则原因&#xff0c;…

【web安全】——web渗透的前缀知识

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

OPC Expert v8.1.2211 Crack

像专业人士一样解决您的 OPC 和 DCOM 连接问题 [无需经验] 快速修复 OPC 和 DCOM 错误 使用 OPC Expert&#xff0c;您无需任何经验即可解决和修复 OPC 连接问题。OPC Expert 为您完成繁重的工作&#xff0c;以快速自动诊断 OPC 和 DCOM 问题……Ω578867473而且还不止于此。OP…

阳康后的第一篇博客,先来几道恶心二进制编程题

目录 一、统计二进制中1的个数 二、打印整数二进制的奇数位和偶数位 三、两个整数二进制位不同个数 一、统计二进制中1的个数 这是一道牛客网OJ题&#xff0c;感兴趣的话可以先做一遍再看解析哦 -> 牛客网的OJ链接 注意&#xff1a;上面的牛客网是接口型&#xff0c;不需…

JDBC连接数据库

JDBC&#xff08;Java DataBase Connectivity&#xff09;&#xff0c;简单来讲JDBC是利用Java语言或程序连接并且访问数据库的一门技术&#xff0c;是Java语言中用来规范客户端程序如何访问数据库的应用程序接口&#xff0c;提供了查询和更新数据库操作方法&#xff0c;通常是…

万字讲解!进阶指针!

今天我们来看进阶指针&#xff0c;还没有看过初阶指针的话建议先看看初阶 (3条消息) 初阶指针---从入门到入坟_KLZUQ的博客-CSDN博客 目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 …

php学习笔记-phpday1

php代码基本语法 PHP&#xff08;PHP: Hypertext Preprocessor&#xff09;即“超文本预处理器”&#xff0c;是在服务器端执行的脚本语言&#xff0c;尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言&#xff0c;吸纳Java和Perl多个语言的特色发展出自己的特色语法&…

在有限和无限图上计算simulations

摘要 我们展示了用于计算带有标签的图的相似性的算法。相似关系适用于不同的激活系统模式。对于有限图&#xff0c;我们提出了一种用于计算n个点m条边的图&#xff08;假设m≥nm\ge nm≥n&#xff09;的相似关系的O(mn)算法。为了高效地表示无限图&#xff0c;我们提出了一个标…