• springMVC数据封装成POJO


    springMVC把前台的数据封装为POJO与struts2的封装形式不同。struts2需要在控制器声明需封装的POJO,而springMVC不需要任何准备工作,只需在相应的方法的参数中加上需封装的POJO,当用户提交表单时,springMVC会根据表单中dom元素的name属性与请求的方法中的参数中的POJO的属性名进行比对,如果相同,则将name属性的值赋给这个属性,进而完成封装,下面举例说明:

    一、先看一下定义的POJO

    Orders(订单)

    /**
     * 订单
     * @author Administrator
     *
     */
    public class Orders implements Serializable {
        private String oid;//订单id
        
        private Opportunity  opportunity;//销售机会 
        private Linkman linkman;//联系人 
        private User user;//业务员 
        
        private Date bdate; //开单日期
        private Date fdate;//合同到期时间
        private Float ysprice;//应收金额
        private int statues;//审核状态
        private Integer flag;//订单状态 
        private String remark;//备注
        private Integer uids;//订单审核人
    }

    上面的Orders类中有一个Opportunity属性(销售机会),属性名为opportunity,下面是定义的Opportunity类:

    Opportunity(销售机会)(注:Orders与Opportunity呈一对一关联)

    /**
     * 销售机会
     * @author Administrator
     *
     */
    public class Opportunity implements Serializable{
        private int opid;
        private Float allprice;//所有商品的购买总价
        private int allcount;//所有商品的购买数量
        private String odate;//下单时间
        
        private User user;//业务员
        private Linkman linkman;//联系人
        
    }

    二、再看一下提交的jsp相关片段

    三、上面的表单的请求地址是${pageContext.request.contextPath}/addOrder,我们来看一下这个方法的定义:

    当用户提交表单后,springMVC会找到这个方法,然后将表单中的name为opportunity对应的值赋给这个方法中Orders类中实例引用名orders的opportunity属性,通过debug调试,可以印证这一点:

    可以看出,对应表单中的name="opportunity.linkman.lname"对应的值,springMVC是先将此值赋给Opportunity类中的linkman属性,再将opportunity的值赋给addOrder方法中参数Orders中的opportunity属性,即完成了对其引用名orders的封装。

    四、如果将表单、请求方法修改成以下的情况,那又会如何呢?

    还是bug调试,看一下执行addOrder方法时的情况:

    以上的结果表明表单提交后,springMVC并没有为addOrder方法参数中的Orders封装opportunity这个属性,这是因为表单中根本找不到这个属性,何谈封装呢?但表单中有opid和linkman.lname这两个属性,且在addOrder方法中有Opportunity opp这个参数,在Opportunity 类中有opid、linkman这个两个属性,因此springMVC会将表单中的opid和linkman.lname这两个属性的值赋给参数中的Opportunity opp的opid、linkman这两个属性,从而进行封装。

    后记:springMVC相比于struts2,封装机制更为智能,代码会简化很多。

  • 相关阅读:
    hdu 2680(最短路)
    hdu 1548(最短路)
    hdu 1596(最短路变形)
    hdu 1546(dijkstra)
    hdu 3790(SPFA)
    hdu 2544(SPFA)
    CodeForces 597B Restaurant
    CodeForces 597A Divisibility
    CodeForces 598E Chocolate Bar
    CodeForces 598D Igor In the Museum
  • 原文地址:https://www.cnblogs.com/wql025/p/5006010.html
Copyright © 2020-2023  润新知