十一、Struts2封装请求参数的方式

方式一、Action 本身作为model对象,通过成员setter封装(一个名字为params的拦截器干的)

注意:表单中的名称要和动作类中的名称一致(这是必须的)

表单代码:

<br /> ---------------封装请求参数到Action中-----------<br />

    

    <form
action="${pageContext.request.contextPath }/paramAction1.action"

        method="post">

        用户名:<input
type="text"
name="username"/>
<br/>

        密码: <input
type="password"
name="password"/>
<br/>

        <input
type="submit"
value="登录">        

    </form>

 

Struts.xml文件中的代码:

<package
name="p1"
extends="struts-default">

        <action
name="paramAction"
class="com.itheima.action.ParamAction1"

            method="execute">

            

        </action>

    </package>

 

动作类中的代码:

//用动作类封装数据:定义字段名。提供setter方法,setter属性名称和表单的输入域中的名称保持一致

public
class
ParamAction1
extends ActionSupport{

    private String username;

    private String password;

    

    public
void setUsername(String username) {

        this.username = username;

    }

    

    public
void setPassword(String password) {

        this.password = password;

    }

    

    @Override

    public String execute() throws Exception {

        System.out.println(username + ":" + password);

        //这里可以调用service层的方法保存对象:save(this)

        return
NONE;

    }

}

 

方式二:动作类和模型分开

表单代码:

<br /> ------封装请求参数到模型对象中,Action和模型分开------<br />

    

    <form
action="${pageContext.request.contextPath }/paramAction2.action"

        method="post">

        用户名:<input
type="text"
name="user.username"/>
<br/>

        密码: <input
type="password"
name="user.password"/>
<br/>

        <input
type="submit"
value="登录">        

    </form>

 

-------------

动作类代码:

//用动作类封装数据:定义字段名。提供setter方法,setter属性名称和表单的输入域中的名称保持一致

public
class
ParamAction2
extends ActionSupport {

    private User user;

 

    public User getUser() {

        return
user;

    }

 

    public
void setUser(User user) {

        this.user = user;

    }

 

    @Override

    public String execute() throws Exception {

        System.out.println(user);

        // 这里可以调用service层的方法保存对象:save(user)

        return
NONE;

    }

}

 

------------

实体类:User.java

//实体类:

public
class
User
implements Serializable {

    private String username;

    private String password;

 

    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;

    }

 

    @Override

    public String toString() {

        return
"User [username=" + username + ", password=" + password + "]";

    }

}

 

方式三:模型驱动(面试)

表单代码:

<br/>----封装请求参数到模型对象中:Action和模型分开。模型驱动------<br/>

    

    <form
action="${pageContext.request.contextPath }/paramAction3.action"

        method="post">

        用户名:<input
type="text"
name="username"/>
<br/>

        密码: <input
type="password"
name="password"/>
<br/>

        <input
type="submit"
value="登录">        

    </form>

 

动作类代码:

//动作类和实体类分开

public
class
ParamAction3
extends ActionSupport implements ModelDriven<User> {

    // 此处必须创建一个对象

    private User user = new User();;

 

    @Override

    public String execute() throws Exception {

        System.out.println(user);

        // 这里可以调用service层的方法保存对象:save(user)

        return
NONE;

    }

    

    @Override

    public User getModel() {

        //这里需要返回一个对象

        return
user;

    }

}

 

注:模型驱动实际上是由一个拦截器来做的。modelDriven拦截器来做。把getModel方法返回的对象,压入一个叫做ValueStack的栈顶。struts框架就会根据表单的name属性,调用对应栈顶对象的setter方法,从而把请求参数封装进来。

 

封装数据到集合类型Collection中:

表单代码:

<body>

    <br/>-----封装请求参数到集合中:使用场景,批量添加-----<br/>

    <form
action="${pageContext.request.contextPath }/paramAction4"
method="post">

        用户名:<input
type="text"
name="users[0].username"/>

        密码:<input
type="password"
name="user[0].password"/><br/>

        用户名:<input
type="text"
name="users[1].username"/>

        密码:<input
type="password"
name="user[1].password"/><br/>

        用户名:<input
type="text"
name="users[2].username"/>

        密码:<input
type="password"
name="user[2].password"/><br/>

        <input
type="submit"
value="添加">

    </form>

</body>

 

动作类代码:

//数据封装到集合中

public
class
ParamAction4
extends ActionSupport {

    // 定义一个集合

    private Collection<User> users;

 

    public Collection<User> getUsers() {

        return
users;

    }

 

    // 通过该方法将对象注入到集合中,不用显示的添加对象到集合中

    public
void setUsers(Collection<User> users) {

        this.users = users;

    }

 

    public String execute() throws Exception {

        for (User user : users) {

            System.out.println(user);

        }

        return
NONE;

    }

}

 

封装数据到Map中

表单代码:

<br/>-----封装请求参数到Map中:使用场景,批量添加-----<br/>

    <form
action="${pageContext.request.contextPath }/paramAction5"
method="post">

        用户名:<input
type="text"
name="users.u1.username"/>

        密码:<input
type="password"
name="users.u1.password"/><br/>

        用户名:<input
type="text"
name="users['u2'].username"/>

        密码:<input
type="password"
name="user['u2'].password"/><br/>

        <input
type="submit"
value="添加">

    </form>

 

动作类代码:

//数据封装到集合中

public
class
ParamAction5
extends ActionSupport {

    // 定义一个Map集合

    private Map<String, User> users;

 

    // 提供相应的setter和getter方法

    public Map<String, User> getUsers() {

        return
users;

    }

 

    public
void setUsers(Map<String, User> users) {

        this.users = users;

    }

 

    @Override

    public String execute() throws Exception {

        for (Map.Entry<String, User> me : users.entrySet()) {

            System.out.println(me.getKey() + "=" + me.getValue());

        }

        return
NONE;

    }

}

 

十一、Struts2封装请求参数的方式的更多相关文章

  1. struts2封装请求参数

    利用struts2框架进行将页面请求的参数封装有三种方法 第一种(不推荐) 就是动作类和bean中结合在一起,这样方法比较简单,但是很混乱. 代码: package com.example.actio ...

  2. struts2获得请求参数的方式

    1.用Action的属性接收参数 2.用DomainModel(域模型)接收参数 3.用ModelDriven接收参数 使用这种方式接受参数需要实现ModelDriven接口,

  3. struts2之请求参数接收

    struts2之请求参数接收 1. 采用基本类型接受请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名的属性.请求路径:http:/ ...

  4. struts2接受请求参数

    https://blog.csdn.net/y249839817/article/details/77702745 https://blog.csdn.net/nthack5730/article/d ...

  5. Servlet请求参数的方式

    今天整理了以下几种常用的Servlet请求参数的方式,下面简单地介绍 1)getParameter(String key)返回一个字符串,获得name和key 一样的表单控件的数据,如果有重复的nam ...

  6. 入门servlet:request获取请求参数通用方式

    一.获取请求参数通用方式 1. String getParameter(String name):根据参数名称获取参数值 例:username=flypig&password=2343 2. ...

  7. struts2获取请求参数的三种方式及传递给JSP参数的方式

    接上一篇文章 package test; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; impo ...

  8. Struts2接受请求参数三种常用方法

    一 接受请求参数主要有三种:属性驱动 对象驱动 模型驱动<model Driven> 方式1:在Action中接收请求参数不需要使用request对象,在Action中定义与请求参数相同名 ...

  9. 利用Common-BeanUtils封装请求参数

    一.BeanUtils介绍 commons-beanutils是利用反射机制对JavaBean的属性进行处理,提供了对于JavaBean的各种处理方法.众所周知,一个JavaBean通常包含了大量的属 ...

随机推荐

  1. RocketMQ术语[转]

    RocketMQ RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点:能够保证严格的消息顺序 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 ...

  2. purple-accessData

    ylbtech-class:purple-accessData A, 返回顶部 1,送货时间 #region 送货时间 /// <summary> /// 送货时间 /// </su ...

  3. 为FaceBook审核提交模拟器包及自己验证模拟器包

    为FaceBook审核提交模拟器包及自己验证模拟器包折腾了一番,因为我的项目是用cocoapods管理的,所以跟普通直接运行name.xcodeproj项目有所不同. 切入正题 1.先设置 relea ...

  4. 无侵入方面编程-用HttpModule+SoapExtension监视页面执行参数(一)

    先简单介绍一下项目吧,我们这个项目是用VS2003开发的,老早一个项目.WEB前端机+业务处理(WebService层)+数据库分别布置在不同的计算机上. 现在老总有一个需求,要统计出每个页面的执行时 ...

  5. 在Windows驗證網站設定部分匿名存取

    最近接連遇到幾次的需求:供內部使用的ASP.NET網站,全站使用Windows驗證,使用者以網域AD帳號登入,但網站包含少數API性質的ASHX.ASPX或MVC Action,提供其他系統呼叫整合. ...

  6. 算法库:Matlab与C++混合编程

    算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...

  7. POJ - 1159 Palindrome(dp-回文变形)

    d.求对字符串最少添加几个字符可变为回文串. s. 法1:直接对它和它的逆序串求最长公共子序列长度len.N-len即为所求.(N为串长度) 因为,要求最少添加几个字符,我们可以先从原串中找到一个最长 ...

  8. (转)配置Website的IIS时遇到的问题与解决方法

    在部署WebSite时遇到问题,刚好发现Eric Sun的文章,因此转载做个副本. 原文地址:http://www.cnblogs.com/mingmingruyuedlut/archive/2011 ...

  9. (转)C#调用非托管Win 32 DLL

    转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...

  10. BPMN

    1.私有业务流程: 特定行业规则制度比如惠普生产线流程-针对业务人员 2.公有业务流程: 技术实现-针对流程开发人员 http://www.blogjava.net/RongHao/archive/2 ...