美文网首页
SpringMVC入门知识6

SpringMVC入门知识6

作者: MsterKerrigan | 来源:发表于2017-11-03 15:34 被阅读0次

    特殊类型的参数绑定:
    包装类型的pojo参数绑定:
    需求:
    实现商品查询条件,在商品查询的controller中实现商品查询条件的传入
    实现的方法:
    1、在形参中添加HttpRequestServlet request参数,通过request接收查询条件参数
    2、在形参中让包装类型的pojo接收查询条件参数
    分析:
    页面传参数的特点:
    比较复杂,比较多样性(参数包括用户账号、订单的信息。。。),没有规律
    如果将这些放到简单的pojo(属性是简单类型的)类中,pojo类中属性比较多,比较乱
    建议使用包装类型的pojo,属性是pojo
    页面的参数和controller形参的定义:
    页面的参数:
    对于pojo类里面的pojo的属性,可以直接用包装类.被包装类.属性名
    SQL语句只是单表查询的话可以不采用包装类
    对于综合查询,需要设置包装类
    包装类尽量不要用继承
    集合类型的参数绑定:
    数组:
    需求:
    商品的批量删除
    用户在页面选中多个选项,实现批量删除
    实现:
    表现层的实现
    关键:
    将页面多项选择的id传到controller方法的形参中
    方法的形参使用数组来接收页面请求的多个id
    页面的定义:
    controller方法的定义:
    List:
    需求:
    批量提交数据
    将提交的数据绑定的list<pojo>中,比如:
    成绩的录入(多门课的成绩,批量提交)
    批量商品的修改:
    将多个商品信息提交到controller方法
    表现层的实现:
    页面的定义:
    controller方法的定义:
    进入批量商品修改页面(页面样式参考商品信息查询页面)
    批量修改商品的提交,在形参里面不能直接写List
    使用List来接收页面提交的批量数据,通过包装pojo接收,在pojo中定义List<pojo>属性
    在形参中添加包装有List<pojo>的pojo
    Map:
    在包装里面定义map,也是通过包装类型来接收
    商品修改
    校验的理解:
    在项目中,通常使用较多的是前端的校验,比如说页面中js校验,对于安全要求较高点建议在服务端进行校验
    服务端校验:
    控制层controller:校验页面请求的参数的合法性。在服务端控制层controller校验,不区分客户端类型(浏览器、手机客户端、远程调用)
    业务层service(使用较多的):主要校验关键业务参数,仅限于service接口中所使用的参数
    持久层dao:一般是不校验的
    添加校验:
    思路:
    页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到界面
    具体的需求:
    商品修改,添加校验(校验商品名称的长度、生产日期的非空校验),如果校验出错,在商品修改页面显示错误信息
    SpringMVC提供的校验:
    使用Hibernate的validation校验框架,和Hibernate没有任何关系
    环境的准备:
    hibernate-validator
    jboss-logging
    validation-api
    配置校验器:
    校验器注入到处理器适配器中:
    org.hibernate.validator.HibernateValidator
    指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则使用classpath下的ValidationMessage.properties
    <mvc:annotation-driven>里面包含validator属性
    在pojo中添加校验规则:
    比如用户名的长度限制在6-16个字符:
    @Size(min=6,max=16,message="提示信息")
    但是提示信息一般配置在配置文件中,用key=value的形式来写,在pojo的message里面写入{key}
    非空校验:
    @NotNull(message="")
    实现校验功能:
    在需要校验的controller的pojo前面加入@Validated 在需要校验的pojo后面BindingResult bindingresult,用来接收校验错误的信息,这两个配对出现,顺序是固定的
    必须使一前一后
    获取校验错误的信息:
    if(bindingresult.hasErrors()){
    List<ObjectError> allerrors = bindingresult.getAllErrors();
    for(ObjectError objecterror : allerrors){
    System.out.println(objecterror.getDefaultMessage());//输出错误信息
    }
    }
    在页面显示错误信息:
    model.setAttribute(arg0,arg1);
    用<c:forEach>遍历错误信息
    用${var里面的值.DefaultMessage}来打印输出
    分组校验:
    需求:
    在pojo中定义校验规则,而pojo是被多个controller调用,当不同的controller对同一个pojo进行校验,但是每个controller方法需要不同的校验
    解决方法:
    定义多个校验的分组(其实是一个java接口)
    每个controller方法使用不同的校验分组,在这个分组中定义有哪些规则,每个controller方法使用不同的校验分组
    校验的分组:
    定义不同的接口,接口中不需要定义方法仅是对不同的校验规则进行分组
    在校验规则中添加分组:
    @Size(min=6,max=16,message="提示信息",groups="Group1.class")
    groups可以定义多个分组
    在controller中使用指定分组的校验:
    @Validated(value={Group1.class})指定分组的校验

    相关文章

      网友评论

          本文标题:SpringMVC入门知识6

          本文链接:https://www.haomeiwen.com/subject/ydmtmxtx.html