SpringMVC入门知识6

特殊类型的参数绑定:
包装类型的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})指定分组的校验

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 一、准备 1.1 校验理解 项目中,通常使用较多的是前端的校验,比如页面中js校验。对于安全要求较高建议在服务端进...
    yjaal阅读 4,161评论 1 4
  • 经过上篇文章Spring、Spring MVC与Mybatis整合工程搭建我们便将SSM的环境搭建了,接下来我们便...
    codingXiaxw阅读 22,677评论 1 38
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 明月姣姣地上霜, 星汉璨璨晟日光。 辗转反侧夜不寐, 起坐复...
    道明子阅读 442评论 0 3