Struts2数据的封装

1.为什么要使用数据的封装呢?
    * 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中
    * 封装数据为开发提供了很多方便 
    * Struts2框架提供了很强大的数据封装的功能,不再需要使用Servlet的API完成手动封装了!!        

2.Struts2中提供了两类数据封装的方式?
    * 属性驱动
        > 提供对应属性的set方法进行数据的封装。
            * 表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可。
            * 表单中的数据提交,最终找到Action类中的setXxx的方法,最后赋值给全局变量。

            * 注意0:Struts2的框架采用的拦截器完成数据的封装。
            * 注意1:这种方式不是特别好:因为属性特别多,提供特别多的set方法,而且还需要手动将数据存入到对象中.
            * 注意2:这种情况下,Action类就相当于一个JavaBean,就没有体现出MVC的思想,Action类又封装数据,又接收请求处理,耦合性较高。

        > 在页面上,使用OGNL表达式进行数据封装。
            * 在页面中使用OGNL表达式进行数据的封装,就可以直接把属性封装到某一个JavaBean的对象中。
            * 在页面中定义一个JavaBean,并且提供set方法:例如:private User user;
            * 页面中的编写发生了变化,需要使用OGNL的方式,表单中的写法:<input type="text" name="user.username">

            * 注意:只提供一个set方法还不够,必须还需要提供user属性的get和set方法!!!
                > 先调用get方法,判断一下是否有user对象的实例对象,如果没有,调用set方法把拦截器创建的对象注入进来,

    * 模型驱动(拦截器是modelDriven)
        > 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别!
        > 编写的页面不需要任何变化,正常编写name属性的值。
        > 模型驱动的编写步骤:
            * 手动实例化JavaBean,即:private User user = new User();
            * 必须实现ModelDriven<T>接口,实现getModel()的方法,在getModel()方法中返回user即可!!

3.三种封装的方式的总结
    * 属性驱动的方式
        * 在Action的类中,提供页面对象的属性,并且提供set方法就可以了
        * 页面正常写     例如:username

    * 属性驱动的方式(把数据封装到JavaBean中)
        * 在Action的类中,提供对象的属性,提供get和set方法
        * 使用OGNL表达式的写法  例如:user.username

    * 模型驱动的方式   
        * 必须要实现ModelDriven接口,实现getModel()方法
        * 定义JavaBean的属性,手动实例化!
        * 页面正常写     例如:username

4.提供的测试页面(页面代码已经编写好,这样可以节省很多时间)
    * 测试的页面代码
        <form action="${ pageContext.request.contextPath }/xxx.action" method="post">
            姓名:<input type="text" name="username" /><br/>
            年龄:<input type="text" name="age" /><br/>
            爱好:<input type="checkbox" name="love" value="lq"/>篮球
                  <input type="checkbox" name="love" value="zq"/>足球
                  <input type="checkbox" name="love" value="pq"/>排球 
                 <br/>
            <input type="submit" value="登陆" />
        </form>

    * 需要的JavaBean的代码
        private String username;
        private int age;
        private String[] love;



1.封装复杂类型的参数(集合类型 Collection 、Map接口等)
2.需求:页面中有可能想批量添加一些数据,那么现在就可以使用上述的技术了。把数据封装到集合中。
3.把数据封装到Collection中
    * 因为Collection接口都会有下标值,所有页面的写法会有一些区别,注意:
        > <input type="text" name="products[0].name" />
    * 在Action中的写法,需要提供products的集合,并且提供get和set方法。

4.把数据封装到Map中
    * Map集合是键值对的形式,页面的写法
        > <input type="text" name="map['one'].name" />
    * Action中提供map集合,并且提供get和set方法。

5.在Action中不推荐使用模型驱动的方式来封装数据到集合中,太麻烦,基本都选择第二种方式来封装。  

6.提供的JSP页面
    <form action="${ pageContext.request.contextPath }/xxx.action" method="post">
        商品名称:<input type="text" name="" /><br/>
        商品价格:<input type="text" name="" /><br/>

        商品名称:<input type="text" name="" /><br/>
        商品价格:<input type="text" name="" /><br/>
        <input type="submit" value="添加" />
    </form>

7.总结
    * 注意:页面的写法
        * 如果封装的List集合,采用下标的写法
        * 如果封装的是map集合,自己知道key值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值