版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringMVCSpringMVC在3.0版本之前有自己的验证功能,是通过定义与实体类有关联的校验类实现的,在3.0之后增加了对JSR303校验规范的支持。3定义与Bean对应的校验类方式为了实现对实体类实现校验,需要在实体类同名的包内定义实现了Validator接口的XxxValidator类,然后在该类内完成数据合法性的校验。例如实体类叫做com.shinowit.entity.UserInfo则校验类应该为com.shinowit.entity.UserInfoValidator,并实现Validator接口。控制器类代码中在需要校验的实体类参数前写@Valid注解,并提前注册校验器。实体类代码:@Entity@Table(name="user_info",uniqueConstraints={@UniqueConstraint(columnNames={"user_name"})//定义唯一索引的字段})publicclassUserInfo{@Id@GeneratedValue(generator="uuidgenerator")@GenericGenerator(name="uuidgenerator",strategy="uuid")@Column(name="user_id",length=32)privateStringuserid;@Column(name="user_name",length=30)privateStringusername;@Column(name="user_pass",length=50)privateStringuserpass;privateintage;校验类代码:importorg.springframework.validation.Errors;importorg.springframework.validation.ValidationUtils;importorg.springframework.validation.Validator;publicclassUserInfoValidatorimplementsValidator{@Overridepublicbooleansupports(Class<?>clazz){returnclazz==UserInfo.class;//判断待校验对象是否是UserInfo类
}@Overridepublicvoidvalidate(Objecttarget,Errorserrors){UserInfouserInfo=(UserInfo)target;if((userInfo.getUsername()==null)||(userInfo.getUsername().trim().length()<1)){ValidationUtils.rejectIfEmpty(errors,"username",null,"用户名输入不正确,不能为空!");}if((userInfo.getUsername()!=null)&&(userInfo.getUsername().trim().length()<3)){errors.rejectValue("username",null,"用户名不能小于3个字符!");}}}控制器类代码:@Controller@RequestMapping(value="/user")publicclassUserManagerController{@ResourceprivateBaseDAO<UserInfo>user_dao;@InitBinderpublicvoidinitBinder(DataBinderbinder){//向当前Controller注册校验器
binder.setValidator(newUserInfoValidator());}@RequestMapping(value="/new",method=RequestMethod.GET)publicStringprepareNew(@ModelAttribute("user")UserInfouserInfo){userInfo.setAge(20);//提供一些缺省值简化用户输入
return"user/create";}@RequestMapping(value="/new",method=RequestMethod.POST)publicStringprepareNew(@Valid@ModelAttribute("user")UserInfouserInfo,BindingResultbindingResult,RedirectAttributesredirectAttributes,Modelmodel){if(bindingResult.hasErrors()){return"user/create";}Stringnew_user_id=null;try{new_user_id=(String)user_dao.insert(userInfo);}catch(Exceptione){e.printStackTrace();}if(null!=new_user_id){redirectAttributes.addFlashAttribute("msg","保存成功!");return"redirect:/user/list";}else{model.addAttribute("msg","保存失败!");return"user/create";}}}create.jsp代码:<%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@taglibprefix="c"uri=""%><%@taglibprefix="form"uri=""%><html><head><title></title><style>.errorClass{color:#ff0000;font-weight:bold;}</style></head><body>${msg}<form:formmodelAttribute="user"action="${ctx}/user/new"method="post"><label>用户名:</label><form:inputpath="username"/><form:errorspath="username"cssClass="errorClass"></form:errors><label>密码:</label><form:passwordpath="userpass"/><form:errorspath="userpass"cssClass="errorClass"></form:errors><label>年龄:</label><form:inputpath="age"/><form:errorspath="age"cssClass="errorClass"></form:errors><inputtype="submit"value="提交"/></form:form></body></html>实现org.springframework.validation.Validator校验接口的方法小结:需要定义校验器类并实现特定的接口。需要在使用前注册或者实例化。10JSR303校验什么是JSR303?JSR303–BeanValidation是一个数据验证的规范,2009年11月确定最终方案。2009年12月JavaEE6发布,BeanValidation作为一个重要特性被包含其中。如何使用?--在需要校验的对象上面写注解即可,例如:可以写哪些注解?@Null 被注释的元素必须为null@NotNull 被注释的元素必须不为null@AssertTrue 被注释的元素必须为true@AssertFalse 被注释的元素必须为false@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值@Size(max,min) 被注释的元素的大小必须在指定的范围内@Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内@Past 被注释的元素必须是一个过去的日期@Future 被注释的元素必须是一个将来的日期@Pattern(value) 被注释的元素必须符合指定的正则表达式Hibernate对标准的JSR303规范有所扩充:@Email 被注释的元素必须是电子邮箱地址@Length 被注释的字符串的大小必须在指定的范围内@NotEmpty 被注释的字符串的必须非空@Range 被注释的元素必须在合适的范围内示例:@Column(name="user_name",length=30)
@Size(min=3,max=30,message="用户名必须介于3到30个字符之间")
privateStringusername;@Column(name="user_pass",length=50)@Size(min=1,max=50,message="密码必须介于1到50个字符之间")
privateStringuserpass;控制器代码:@Controller@RequestMapping(value="/user")publicclassUserManagerController{@ResourceprivateBaseDAO<UserInfo>user_dao;@RequestMapping(value="/new",method=RequestMethod.GET)publicStringprepareNew(@ModelAttribute("user")UserInfouserInfo){userInfo.setAge(20);//提供一些缺省值简化用户输入
return"user/create";}@RequestMapping(value="/new",method=RequestMethod.POST)publicStringprepareNew(@Valid@ModelAttribute("user")UserInfouserInfo,BindingResultbindingResult,RedirectAttributesredirectAttributes,Modelmodel){if(bindingResult.hasErrors()){return"user/create";}Stringnew_user_id=null;try{new_user_id=(String)user_dao.insert(userInfo);}catch(Exceptione){e.printStackTrace();}if(null!=new_user_id){redirectAttributes.addFlashAttribute("msg","保存成功!");return"redirect:/user/list";}else{model.addAttribute("msg","保存失败!");return"user/create";}}前端jsp代码:<%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@taglibprefix="c"uri=""%><%@taglibprefix="form"uri=""%><html><head><title></title><style>.errorClass{color:#ff0000;font-weight:bold;}</style></head><body>${msg}<form:formmodelAttribute="user"action="${ctx}/user/new"method="post"><label>用户名:</label><form:inputpath="username"/><form:errorspath="username"cssClass="errorClass"></form:errors><label>密码:</label><form:passwordpath="userpass"/><form:errorspath="userpass"cssClass="errorClass"></form:errors><label>年龄:</label><form:inputpath="age"/><form:errorspath="age"cssClass="errorClass"></form:errors><inputtype="submit"value="提交"/></form:form></body></html>18JSR303校验与国际化除了可以在定义JSR303校验规则的时候写“message=”提供校验失败后的提示信息,还可以提供国际化资源id完成校验失败消息的国际化编程支持。@Size(min=3,max=30,message=“用户名必须介于3到30个字符之间”)//提示消息写死的方式
privateStringusername;@Size(min=1,max=50,message=“{userinfo.userpass.invalid}”)//写成资源文件id的方式
privateStringuserpass;要让校验消息完成国际化支持,需要确保springmvc的配置参数里面包含以下三部分内容:<mvc:annotation-drivenconversion-service="conversionService"validator="validator"/><!--缺省的类型转换错误提示消息资源文件--><beanid="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><propertyname="basename"value="WEB-INF/classes/messages"/><propertyname="fileEncodings"value="utf-8"/><propertyname="cacheSeconds"value="-1"/><!--neverreload--><propertyname="useCodeAsDefaultMessage"value="true"/></bean><!--JSR303Validator定义--><beanid="validator"class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><propertyname="providerClass"value="org.hibernate.validator.HibernateValidator"/><propertyname="validationMessageSource"ref="messageSource"/></bean>示例://实体类增加JSR303校验规则,message里面写资源文件内容id值@Column(name="user_pass",length=50)@Size(min=1,max=50,message="{userinfo.userpass.invalid}")//JSR303验证
privateStringuserpass;//messages_zh_CN.properties文件内的内容userinfo.userpass.invalid=用户密码输入不满足要求22自定义JSR303校验器手机号码校验器代码示例:importjavax.validation.Constraint;importjavax.validation.Payload;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target({ElementType.FIELD,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy=MobilePhoneValidator.class)public@int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公园管理所某年工作计划
- 2024年四年级班主任工作计划范文怎么写
- 区域经理年度计划表
- 幼儿园学前班2024-2024学年度班主任工作计划
- 供销社年度工作目标措施工作计划
- 2024年度疾病预防控制工作计划
- 区划地名科近期工作计划
- 办公室春节前后工作计划
- 有关年度卫生工作计划
- 幼儿园办公室主任个人工作计划范本
- 全国大学英语四、六级考试缺考申请表
- 美国特朗普-课件
- 抽水台班记录表
- TBA19利乐灌装机操作手册
- 篮球 社团活动记录表
- 健康体检中心-体检科常识考试题及答案
- 股票技术分析-大全最强
- 武汉大学管理科学与工程培养方案
- 校园一日安全巡查记录表【范本模板】
- 结婚聘书模板范文(通用17篇)
- 2023届高考英语一轮复习题型总动员之七选五:科技类(有答案详解10篇)
评论
0/150
提交评论