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

下載本文檔

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

文檔簡介

SpringMVCSpringMVC在3.0版本之前有自己的驗證功能,是通過定義與實體類有關(guān)聯(lián)的校驗類實現(xiàn)的,在3.0之后增加了對JSR303校驗規(guī)范的支持。3定義與Bean對應(yīng)的校驗類方式為了實現(xiàn)對實體類實現(xiàn)校驗,需要在實體類同名的包內(nèi)定義實現(xiàn)了Validator接口的XxxValidator類,然后在該類內(nèi)完成數(shù)據(jù)合法性的校驗。例如實體類叫做com.shinowit.entity.UserInfo則校驗類應(yīng)該為com.shinowit.entity.UserInfoValidator,并實現(xiàn)Validator接口??刂破黝惔a中在需要校驗的實體類參數(shù)前寫@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){//向當(dāng)前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>實現(xiàn)org.springframework.validation.Validator校驗接口的方法小結(jié):需要定義校驗器類并實現(xiàn)特定的接口。需要在使用前注冊或者實例化。10JSR303校驗什么是JSR303?JSR303–BeanValidation是一個數(shù)據(jù)驗證的規(guī)范,2009年11月確定最終方案。2009年12月JavaEE6發(fā)布,BeanValidation作為一個重要特性被包含其中。如何使用?--在需要校驗的對象上面寫注解即可,例如:可以寫哪些注解?@Null 被注釋的元素必須為null@NotNull 被注釋的元素必須不為null@AssertTrue 被注釋的元素必須為true@AssertFalse 被注釋的元素必須為false@Min(value) 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值@Max(value) 被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值@DecimalMin(value) 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值@DecimalMax(value) 被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值@Size(max,min) 被注釋的元素的大小必須在指定的范圍內(nèi)@Digits(integer,fraction) 被注釋的元素必須是一個數(shù)字,其值必須在可接受的范圍內(nèi)@Past 被注釋的元素必須是一個過去的日期@Future 被注釋的元素必須是一個將來的日期@Pattern(value) 被注釋的元素必須符合指定的正則表達式Hibernate對標準的JSR303規(guī)范有所擴充:@Email 被注釋的元素必須是電子郵箱地址@Length 被注釋的字符串的大小必須在指定的范圍內(nèi)@NotEmpty 被注釋的字符串的必須非空@Range 被注釋的元素必須在合適的范圍內(nèi)示例:@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校驗規(guī)則的時候?qū)憽癿essage=”提供校驗失敗后的提示信息,還可以提供國際化資源id完成校驗失敗消息的國際化編程支持。@Size(min=3,max=30,message=“用戶名必須介于3到30個字符之間”)//提示消息寫死的方式

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

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

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

評論

0/150

提交評論