java課件04框架springmvc6數(shù)據(jù)校驗(yàn)_第1頁
java課件04框架springmvc6數(shù)據(jù)校驗(yàn)_第2頁
java課件04框架springmvc6數(shù)據(jù)校驗(yàn)_第3頁
java課件04框架springmvc6數(shù)據(jù)校驗(yàn)_第4頁
java課件04框架springmvc6數(shù)據(jù)校驗(yàn)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

SpringMVCSpringMVC在3.0版本之前有自己的驗(yàn)證功能,是通過定義與實(shí)體類有關(guān)聯(lián)的校驗(yàn)類實(shí)現(xiàn)的,在3.0之后增加了對(duì)JSR303校驗(yàn)規(guī)范的支持。3定義與Bean對(duì)應(yīng)的校驗(yàn)類方式為了實(shí)現(xiàn)對(duì)實(shí)體類實(shí)現(xiàn)校驗(yàn),需要在實(shí)體類同名的包內(nèi)定義實(shí)現(xiàn)了Validator接口的XxxValidator類,然后在該類內(nèi)完成數(shù)據(jù)合法性的校驗(yàn)。例如實(shí)體類叫做com.shinowit.entity.UserInfo則校驗(yàn)類應(yīng)該為com.shinowit.entity.UserInfoValidator,并實(shí)現(xiàn)Validator接口??刂破黝惔a中在需要校驗(yàn)的實(shí)體類參數(shù)前寫@Valid注解,并提前注冊(cè)校驗(yàn)器。實(shí)體類代碼:@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;校驗(yàn)類代碼:importorg.springframework.validation.Errors;importorg.springframework.validation.ValidationUtils;importorg.springframework.validation.Validator;publicclassUserInfoValidatorimplementsValidator{@Overridepublicbooleansupports(Class<?>clazz){returnclazz==UserInfo.class;//判斷待校驗(yàn)對(duì)象是否是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個(gè)字符!");}}}控制器類代碼:@Controller@RequestMapping(value="/user")publicclassUserManagerController{@ResourceprivateBaseDAO<UserInfo>user_dao;@InitBinderpublicvoidinitBinder(DataBinderbinder){//向當(dāng)前Controller注冊(cè)校驗(yàn)器

binder.setValidator(newUserInfoValidator());}@RequestMapping(value="/new",method=RequestMethod.GET)publicStringprepareNew(@ModelAttribute("user")UserInfouserInfo){userInfo.setAge(20);//提供一些缺省值簡(jiǎn)化用戶輸入

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>實(shí)現(xiàn)org.springframework.validation.Validator校驗(yàn)接口的方法小結(jié):需要定義校驗(yàn)器類并實(shí)現(xiàn)特定的接口。需要在使用前注冊(cè)或者實(shí)例化。10JSR303校驗(yàn)什么是JSR303?JSR303–BeanValidation是一個(gè)數(shù)據(jù)驗(yàn)證的規(guī)范,2009年11月確定最終方案。2009年12月JavaEE6發(fā)布,BeanValidation作為一個(gè)重要特性被包含其中。如何使用?--在需要校驗(yàn)的對(duì)象上面寫注解即可,例如:可以寫哪些注解?@Null 被注釋的元素必須為null@NotNull 被注釋的元素必須不為null@AssertTrue 被注釋的元素必須為true@AssertFalse 被注釋的元素必須為false@Min(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值@Max(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值@DecimalMin(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值@DecimalMax(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值@Size(max,min) 被注釋的元素的大小必須在指定的范圍內(nèi)@Digits(integer,fraction) 被注釋的元素必須是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi)@Past 被注釋的元素必須是一個(gè)過去的日期@Future 被注釋的元素必須是一個(gè)將來的日期@Pattern(value) 被注釋的元素必須符合指定的正則表達(dá)式Hibernate對(duì)標(biāo)準(zhǔn)的JSR303規(guī)范有所擴(kuò)充:@Email 被注釋的元素必須是電子郵箱地址@Length 被注釋的字符串的大小必須在指定的范圍內(nèi)@NotEmpty 被注釋的字符串的必須非空@Range 被注釋的元素必須在合適的范圍內(nèi)示例:@Column(name="user_name",length=30)

@Size(min=3,max=30,message="用戶名必須介于3到30個(gè)字符之間")

privateStringusername;@Column(name="user_pass",length=50)@Size(min=1,max=50,message="密碼必須介于1到50個(gè)字符之間")

privateStringuserpass;控制器代碼:@Controller@RequestMapping(value="/user")publicclassUserManagerController{@ResourceprivateBaseDAO<UserInfo>user_dao;@RequestMapping(value="/new",method=RequestMethod.GET)publicStringprepareNew(@ModelAttribute("user")UserInfouserInfo){userInfo.setAge(20);//提供一些缺省值簡(jiǎn)化用戶輸入

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校驗(yàn)與國(guó)際化除了可以在定義JSR303校驗(yàn)規(guī)則的時(shí)候?qū)憽癿essage=”提供校驗(yàn)失敗后的提示信息,還可以提供國(guó)際化資源id完成校驗(yàn)失敗消息的國(guó)際化編程支持。@Size(min=3,max=30,message=“用戶名必須介于3到30個(gè)字符之間”)//提示消息寫死的方式

privateStringusername;@Size(min=1,max=50,message=“{userinfo.userpass.invalid}”)//寫成資源文件id的方式

privateStringuserpass;要讓校驗(yàn)消息完成國(guó)際化支持,需要確保springmvc的配置參數(shù)里面包含以下三部分內(nèi)容:<mvc:annotation-drivenconversion-service="conversionService"validator="validator"/><!--缺省的類型轉(zhuǎn)換錯(cuò)誤提示消息資源文件--><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>示例://實(shí)體類增加JSR303校驗(yàn)規(guī)則,message里面寫資源文件內(nèi)容id值@Column(name="user_pass",length=50)@Size(min=1,max=50,message="{userinfo.userpass.invalid}")//JSR303驗(yàn)證

privateStringuserpass;//messages_zh_CN.properties文件內(nèi)的內(nèi)容userinfo.userpass.invalid=用戶密碼輸入不滿足要求22自定義JSR303校驗(yàn)器手機(jī)號(hào)碼校驗(yàn)器代碼示例: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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論