struts2 和 MVC 定义关系

StrutsPrepareAndExecuteFilter : 控制器

JSP : 视图

Action : 可以作为模型,也可以是控制器

struts2 Action 接受请求参数 :属性驱动 和 模型驱动

Action处理请求参数三种方式

第一种 :Action 本身作为model对象,通过成员setter封装 (属性驱动 )

页面:

用户名


Action :

public class RegistAction1 extends ActionSupport {
            private String username;
            public void setUsername(String username) {
                this.username = username;
            }
        }

问题一: Action封装数据,会不会有线程问题 ?

* struts2 Action 是多实例 ,为了在Action封装数据 (struts1 Action 是单例的 )

问题二: 在使用第一种数据封装方式,数据封装到Action属性中,不可能将Action对象传递给 业务层

* 需要再定义单独JavaBean ,将Action属性封装到 JavaBean

第二种 :创建独立model对象,页面通过ognl表达式封装 (属性驱动)

页面:

用户名
—– 基于OGNL表达式的写法

Action:

public class RegistAction2 extends ActionSupport {
            private User user;
            public void setUser(User user) {
                this.user = user;
            }

            public User getUser() {
                return user;
            }
        }

问题: 谁来完成的参数封装

第三种 :使用ModelDriven接口,对请求数据进行封装 (模型驱动 ) —– 主流

页面:

用户名


Action :

public class RegistAction3 extends ActionSupport implements ModelDriven<User> {
            private User user = new User(); // 必须手动实例化
            public User getModel() {
                return user;
            }
        }
  • struts2 有很多围绕模型驱动的特性
  • 为模型驱动提供了更多特性

对比第二种、第三种 : 第三种只能在Action中指定一个model对象,第二种可以在Action中定义多个model对象

<input type="text" name="user.username" />
    <input type="text" name="product.info" />

封装数据到Collection和Map

1) 封装数据到Collection 对象

页面:

产品名称

Action :
        public class ProductAction extends ActionSupport {
            private List<Product> products;

            public List<Product> getProducts() {
                return products;
            }

            public void setProducts(List<Product> products) {
                this.products = products;
            }
        }

2) 封装数据到Map 对象

页面:

产品名称
======= one是map的键值

Action :
        public class ProductAction2 extends ActionSupport {
            private Map<String, Product> map;

            public Map<String, Product> getMap() {
                return map;
            }

            public void setMap(Map<String, Product> map) {
                this.map = map;
            }
        }   

struts2-Action处理请求参数的更多相关文章

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

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

  2. Struts2学习笔记(六)——Action处理请求参数

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

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

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

  4. Struts框架(6)---action接收请求参数

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

  5. Struts2之处理请求参数

    时间:2017-1-11 11:05 --Struts2中获取请求参数(重点)1.Struts2是一个MVC框架,那么分别表示什么?    View:JSP    Model:Action    Co ...

  6. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API        1. 在Action类中也可以获取到Servlet一些常用的API        * 需求:提供JSP的表单页面的数据,在Ac ...

  7. Action处理请求参数

    第一种 :Action 本身作为model对象,通过成员setter封装 (属性驱动 ) 第一种方式:<br> <form action="${pageContext.re ...

  8. action接收请求参数

    一.采用基本类型接收请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能接收自动接收请求参数并赋给同名属性. action的代码: public class Pa ...

  9. struts2框架之请求参数(参考第二天学习笔记)

    获取请求参数 请求参数:表单中的数据,或者是超链接中的数据. 1. 得到request,再通过request来获取.2. 属性驱动 在Action中提供与表单字段名称相同的属性即可. 而一个名为par ...

  10. Action获取请求参数的3中方式

    方式一:Action本身作为Model对象,通过属性注入(Setter)方法讲参数数据封装到Action中 具体为:在Action中,提供和参数名相同的几个属性,并为其提供set方法,那么,该参数会被 ...

随机推荐

  1. [编辑器]vim常用操作

    我是ide的用户,对于vim一只停留在:打开.看.写.关闭基本操作,因为现在更多的接触linux服务器,所以为了提高 效率,用好vim是必备技能!下面罗列一些vim的常用操作,用做备忘(不断更新): ...

  2. NOIP模拟:能源(二分答案)

    题目描述 小美为了拯救世界能源危机,她准备了 n 台蓄电池.一开始每台蓄电池有 ai 个单位的能量. 现在她想把 n 台蓄电池调整到能量相同.对于每台蓄电池可以给另一台蓄电池传递能量.但是会有能量损耗 ...

  3. jQuery请求后台接口

    function test() { console.log("请求准备发送"); $.ajax({ type : "POST", url : "/ap ...

  4. webpack web-dev-server 热加载

    摘要 坑位: 千万不要webpack.config.js 加了HotModuleReplacementPlugin , web-dev-server 也加hot:true 配置, 会出现莫名的错误, ...

  5. Angular页面选项卡切换要注意的toggleClass

    在第一,第二篇随笔中写到的选项卡切换,我回头看了看发现缺少了一个很重要的部分,那就是toggleClass. //在js控制器中必须写明指令,要不然在页面写了toggle-class="ac ...

  6. Java 简单的 socket 编程入门实战

    这个是给女朋友写的:) 首先需要知道我们每个电脑都可以成为server(服务器) 和 client(客户端) 我们需要使用java来实现客户端与服务器的数据传输 先帖上代码 注意这里两张代码处于两个j ...

  7. XML属性列表

    <?xml version="1.0" encoding="UTF-8"?> <Resources> <Include > ...

  8. 今天出现了一个问题,Tomcat 进入localhost:8080正常,进入项目内别的页面都是空白页

    经仔细检查发现代码没有任何的问题,经仔细检查找到了原因. 问题原因:拦截器(过滤器)把我的访问请求全都拦下了,我在拦截器里把//chain.doFilter(request, response);这行 ...

  9. [BZOJ3038]上帝造题的七分钟2 树状数组+并查集

    考试的时候用了两个树状数组去优化,暴力修改,树状数组维护修改后区间差值还有最终求和,最后骗了40分.. 这道题有好多种做法,求和好说,最主要的是开方.这道题过的关键就是掌握一点:在数据范围内,最多开方 ...

  10. 【NO.8】jmeter-场景-上传文件-send-a-file

    简要说就3点: POST请求 Request的参数都写在路径内,不写在表单里 上传的文件写在表单里 只要记住以上3点,也就避免了在设计脚本的时候走弯路.下面具体图文并茂地介绍如何使用Jmeter实现上 ...