在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样:

1、属性驱动

1)直接在Action类中定义成员属性来接收请求参数 (将Action当成javaBean),在Action中还需要定义成员属性的setter方法。

表单信息:

 <form action="${pageContext.servletContext.contextPath}/testAction.action">
name:<input type="text" name="name"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>

Action类:

 public class TestAction {
private String name;
private String password; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String execute() {
System.out.println("name: " + name);
System.out.println("password: " + password);
return "success";
}
}

前台输入信息:

后台显示结果:

2)直接将javaBean做为Action的属性,在页面上必须使用ognl表达式来描述组件的name属性

 username:<input type="text" name="user.username"><br>

JavaBean:

 public class Person {
private String name;
private String password; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

表单信息:

 <form action="${pageContext.servletContext.contextPath}/testAction.action">
name:<input type="text" name="person.name"><br>
password:<input type="password" name="person.password"><br>
<input type="submit" value="提交">
</form>

Action:

 public class TestAction {
private Person person; public Person getPerson() {
return person;
} public void setPerson(Person person) {
this.person = person;
} public String execute() {
System.out.println("name: " + person.getName());
System.out.println("password: " + person.getPassword());
return "success";
}
}

前台输入信息:

后台显示结果:

这种方式是通过name="params"的拦截器实现参数封装的。

 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

2、模型驱动

模型驱动处理请求参数的步骤为:

步骤:

  • 1.Action必须实现ModelDriven接口
  • 2.重写getModel()方法,返回一个javaBean对象.
  • 3.实例化一个javaBean对象.

JavaBean:

 public class Person {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

表单信息:

 <form action="${pageContext.servletContext.contextPath}/testAction.action">
name:<input type="text" name="name"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>

Action:

 public class TestAction implements ModelDriven {
private Person person = new Person(); public Person getPerson() {
return person;
} public void setPerson(Person person) {
this.person = person;
} public String execute() {
System.out.println("name: " + person.getName());
System.out.println("password: " + person.getPassword());
return "success";
} @Override
public Object getModel() {
return person;
}
}

前台输入信息:

后台显示结果:

4、封装数据到Collection或数组

JavaBean:

 public class Person {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

表单信息:

 <form action="${pageContext.servletContext.contextPath}/testAction.action">
name1:<input type="text" name="list[0].name"><br>
password1:<input type="password" name="list[0].password"><hr>
name2:<input type="text" name="list[1].name"><br>
password2:<input type="password" name="list[1].password"><br>
<input type="submit" value="提交">
</form>

Action:

 public class TestAction {
private List<Person> list; public List<Person> getList() {
return list;
} public void setList(List<Person> list) {
this.list = list;
} public String execute() {
System.out.println("name1: " + list.get(0).getName());
System.out.println("password1: " + list.get(0).getPassword());
System.out.println("name2: " + list.get(1).getName());
System.out.println("password2: " + list.get(1).getPassword());
return "success";
}
}

前台输入信息:

后台显示结果:

5、封装数据到Map

JavaBean:

 public class Person {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

表单信息:

 <form action="${pageContext.servletContext.contextPath}/testAction.action">
name1:<input type="text" name="map['one'].name"><br>
password1:<input type="password" name="map['one'].password"><hr>
name2:<input type="text" name="map['two'].name"><br>
password2:<input type="password" name="map['two'].password"><br>
<input type="submit" value="提交">
</form>

Action:

public class TestAction {
private Map<String, Person> map; public Map<String, Person> getMap() {
return map;
} public void setMap(Map<String, Person> map) {
this.map = map;
} public String execute() {
System.out.println("name1: " + map.get("one").getName());
System.out.println("password1: " + map.get("one").getPassword());
System.out.println("name2: " + map.get("two").getName());
System.out.println("password2: " + map.get("two").getPassword());
return "success";
}
}

前台输入信息:

后台显示结果:

Struts2学习笔记(六)——Action处理请求参数的更多相关文章

  1. Struts系列笔记(6)---action接收请求参数

    action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...

  2. Struts2学习笔记(三)——Action详解

    Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的. 1.Action的创建方式 1) POJO类(PlainOldJavaObjects简单 ...

  3. struts2学习笔记之八:Action中方法的动态调用

    方法一:action名称+!+方法名称+后缀 Action类中增加addUser()和delUser()方法, package com.djoker.struts2; import org.apach ...

  4. struts2学习笔记(4)接收参数

    ①用action属性接收 登录界面例子 在webroot下创建login.jsp和success.jsp login.jsp中加入表单: <form action="LoginActi ...

  5. Struts2学习笔记(五)——Action访问Servlet API

    在Strut2中访问Servlet API有三种方式: 1.通过ActionContext访问Servlet API,推荐使用这种,但是这种方案它获取的不是真正的事Servlet API. 步骤: 1 ...

  6. struts2 action接收请求参数和类型转换

    1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架)         V:jsp        M:action         C:action  ...

  7. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  8. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  9. 【Struts2学习笔记-3】常量配置

    Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...

随机推荐

  1. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(四)技能屏蔽和简单的Buff等

    本节内容继续上一节教程的内容(如果没有看过前面的教程,请前往学习),不会讲太难的新东西,而是继续探究技能标签(Abiilty Tags)的内容.先来一道开胃菜. 第1.1步: 将上一次的召唤冰龙中的C ...

  2. java系统高并发解决方案(转载收藏)

    一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站 ...

  3. NPOI+反射 实现快速导出

    只是觉得这样很方便 记录一下 公司有封装的方法,不过是查出的Table类型,每次用的时候很都很烦,处理数据也不方便,最主要的是我也没耐心去看,反正在我看来很麻烦,用的时候很头疼.还是习惯通过Model ...

  4. for循环问题

    印象中的for语句是这样的,语法:  for (语句 1; 语句 2; 语句 3) { 被执行的代码块 }  语句 1 (代码块)开始前执行 starts. 语句 2 定义运行循环(代码块)的条件 语 ...

  5. 一个简单、易用的Python命令行(terminal)进度条库

    eprogress 是一个简单.易用的基于Python3的命令行(terminal)进度条库,可以自由选择使用单行显示.多行显示进度条或转圈加载方式,也可以混合使用. 示例 单行进度条 多行进度条 圆 ...

  6. Apache FtpServer 实现文件的上传和下载

    1 下载需要的jar包 Ftp服务器实现文件的上传和下载,主要依赖jar包为: 2 搭建ftp服务器 参考Windows 上搭建Apache FtpServer,搭建ftp服务器 3 主要代码 在ec ...

  7. LeetCode-Best Time to Buy and Sell Stock III[dp]

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  8. ML(1)--概念理解

    机器是如何模拟人来学习的? 人:  observations===>learning===>skill 人从出生开始经过大量的观察(也可能经过身边的的指导)进行学习然后得到相应的技能(比如 ...

  9. Docker网络——单host网络

    前言 前面总结了Docker基础以及Docker存储相关知识,今天来总结一下Docker单主机网络的相关知识.毋庸置疑,网络绝对是任何系统的核心,他在Docker中也占有重要的作用.同样本文基于Clo ...

  10. Akka(16): 持久化模式:PersistentFSM-可以自动修复的状态机器

    前面我们讨论过FSM,一种专门为维护内部状态而设计的Actor,它的特点是一套特殊的DSL能很方便地进行状态转换.FSM的状态转换模式特别适合对应现实中的业务流程,因为它那套DSL可以更形象的描述业务 ...