• SpringMVC学习记录五——功能开发及参数处理


    15       包装类型pojo参数绑定

    15.1      需求

             商品查询controller方法中实现商品查询条件传入。

    15.2      实现方法

    第一种方法:在形参中 添加HttpServletRequest request参数,通过request接收查询条件参数。

    第二种方法:在形参中让包装类型的pojo接收查询条件参数。

             分析:

             页面传参数的特点:复杂,多样性。条件包括 :用户账号、商品编号、订单信息。。。

             如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱。

             建议使用包装类型的pojo,pojo中属性是pojo。

    15.3      页面参数和controller方法形参定义

    页面参数:

             商品名称:<input name="itemsCustom.name" />

             注意:itemsCustom和包装pojo中的属性一致即可。

    controller方法形参:

             public ModelAndView queryItems(HttpServletRequest request,ItemsQueryVo itemsQueryVo) throws Exception

    16      集合类型绑定

    16.1      数组绑定

    16.1.1     需求

    商品批量删除,用户在页面选择多个商品,批量删除。

    16.1.2     表现层实现

    关键:将页面选择(多选)的商品id,传到controller方法的形参,方法形参使用数组接收页面请求的多个商品id。

    controller方法定义:

     

    页面定义:

     

    16.2      list绑定

    16.2.1     需求

    通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交),

    本例子需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中。

    16.2.2     表现层实现

    controller方法定义:

             1、进入批量商品修改页面(页面样式参考商品列表实现)

             2、批量修改商品提交

             使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性

    页面定义:

     

    16.3      map绑定

    也通过在包装pojo中定义map类型属性。

    在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。

    包装类中定义Map对象如下:

    Public class QueryVo {
    
    private Map<String, Object> itemInfo = new HashMap<String, Object>();
    
      //get/set方法..
    
    }

    页面定义如下:

    <tr>
    
    <td>学生信息:</td>
    
    <td>
    
    姓名:<inputtype="text"name="itemInfo['name']"/>
    
    年龄:<inputtype="text"name="itemInfo['price']"/>
    
    .. .. ..
    
    </td>
    
    </tr>

    Contrller方法定义如下:

    public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
    
    System.out.println(queryVo.getStudentinfo());
    
    }

    17       springmvc校验

    17.1      校验理解

    项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。

    服务端校验:

             控制层conroller:校验页面请求的参数的合法性。在服务端控制层conroller校验,不区分客户端类型(浏览器、手机客户端、远程调用)

             业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数。

             持久层dao:一般是不校验的。

    17.2      springmvc校验需求

    springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。

    校验思路:

             页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。

    具体需求:

             商品修改,添加校验(校验商品名称长度,生产日期的非空校验),如果校验出错,在商品修改页面显示错误信息。

    17.3      环境准备

    hibernate的校验框架validation所需要jar包:

     

    17.4      配置校验器

     

    17.5      校验器注入到处理器适配器中

     

    17.6      在pojo中添加校验规则

    在ItemsCustom.java中添加校验规则:

     

    17.7      CustomValidationMessages.properties

    在CustomValidationMessages.properties配置校验错误信息:

     

    17.8      捕获校验错误信息

     

    //在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息

       //注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。

    17.9      在页面显示校验错误信息

    在controller中将错误信息传到页面即可。

     

    页面显示错误信息:

     

    17.10      分组校验

    17.10.1     需求

    在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验,但是每个controller方法需要不同的校验。

    解决方法:

    定义多个校验分组(其实是一个java接口),分组中定义有哪些规则

    每个controller方法使用不同的校验分组

    17.10.2     校验分组

     

    17.10.3     在校验规则中添加分组

     

    17.10.4     在controller方法使用指定分组的校验

     

    18      数据回显

    18.1      什么数据回显

    提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面。

    18.2      pojo数据回显方法

    1、springmvc默认对pojo数据进行回显。

    pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)

    使用@ModelAttribute指定pojo回显到页面在request中的key

    2、@ModelAttribute还可以将方法的返回值传到页面

    在商品查询列表页面,通过商品类型查询商品信息。

    在controller中定义商品类型查询方法,最终将商品类型传到页面。

     

    页面上可以得到itemTypes数据。

     

    3、使用最简单方法使用model,可以不用@ModelAttribute

     

    18.3      简单类型数据回显

    使用最简单方法使用model。

    model.addAttribute("id", id);

  • 相关阅读:
    20170612测试
    vijos1453曼哈顿距离
    vijos1153 猫狗大战
    vijos1037搭建双塔
    dijkstra+priority_queue+vector
    BZOJ1507: [NOI2003]Editor
    dinic模板
    旅行-树形DP
    51nod1799-二分答案
    51nod1791-合法括号子段
  • 原文地址:https://www.cnblogs.com/PengChengLi/p/8505142.html
Copyright © 2020-2023  润新知