11月30在spring mvc中使用Validator框架和文件上传
首先回顧了spring mvc中的表單驗(yàn)證和業(yè)務(wù)邏輯校驗(yàn)失敗后,回到表單頁面中顯示錯(cuò)誤信息的整個(gè)內(nèi)部運(yùn)行流程。
表單校驗(yàn)出錯(cuò)后回到表單注冊(cè)頁面是由默認(rèn)的SimpleFormController的processFormSubmission方法自動(dòng)完成的,王濤忘記這一點(diǎn),他們覆蓋了processFormSubmission方法,直接在processFormSubmission方法中執(zhí)行業(yè)務(wù)邏輯校驗(yàn),結(jié)果導(dǎo)致表單校驗(yàn)失敗后不能回到表單注冊(cè)頁面。
查看幫助文檔,可以了解到SimpleFormController的詳細(xì)工作流程,特別是看onSubmit(Object command,BindException errors)這個(gè)方法的幫助,就知道怎樣寫業(yè)務(wù)邏輯校驗(yàn)失敗的代碼了。
protected ModelAndView onSubmit(Object command,
??????????????????????????????? BindException errors)
{
??errors.addError(new FieldError("name","用戶名重復(fù)"));
??return new ModelAndView(this.getFormView(),errors.getModel());
}
接著分析了onSubmit方法與doSubmitAction方法的應(yīng)用區(qū)別。
講解了如何將Validator框架集成到spring中的設(shè)計(jì)思想:
class MyValidator implements Validator
{
?boolean supports(Class clazz)
?{
??為什么不能使用:UserCommand.class.equals(clazz);?
??這主要是因?yàn)镃lass沒有覆蓋equals方法。
?}
?void validate(Object obj,Errors errors)
?{
?}
}
編寫的校驗(yàn)方法的定義應(yīng)該如下:
public static boolean validateFloatRange(java.lang.Object bean,
???????????????????????????????????????? ValidatorAction va,
???????????????????????????????????????? Field field,
???????????????????????????????????????? Errors errors)
{
????????? ......
}
所以,MyValidator類的validate(Object obj,Errors errors)方法應(yīng)編寫成如下形式“
?void validate(Object obj,Errors errors)
?{
??ValidateResources resources = new ValidateResources(Inputstream []);
??Validator validator = new Validator(resources,"/logon");
??valdiator.setParameter(Validator.PARAM_BEAN,obj);
??validator.setParameter("org.springframework.validation.Errors",errors);
??validator.validate();
??????? }
我問魏奕東,相比他以前不用validator框架而編寫的對(duì)表單信息進(jìn)行校驗(yàn)的代碼和這次使用validator框架編寫的代碼,哪個(gè)更復(fù)雜,他愿意采用哪個(gè)?顯然,使用validator框架編寫的代碼更復(fù)雜、他更愿意用以前的方式進(jìn)行表單校驗(yàn),那我們?yōu)槭裁匆褂胿alidator框架呢?這是為了實(shí)現(xiàn)代碼重用和校驗(yàn)邏輯的封裝和配置使用。如果他想在公司做到更高的開發(fā)職位,他想拿到更多的工資,他就應(yīng)該使用validator框架,這樣,其他級(jí)別低的程序員可以不寫校驗(yàn)代碼了,而直接在validator框架中插入魏奕東寫的校驗(yàn)方法,老板就會(huì)將從其他人身上省下的一部分工錢裝入到魏奕東的口袋,呵呵!
魏奕東,別高興得太早!你想干的這份工作,早就有人干了,這就是spring module,它模仿struts實(shí)現(xiàn)的validator框架,實(shí)現(xiàn)了調(diào)用validator框架的sring mvc的Validator,現(xiàn)在,我們就來看看如何使用spring module提供的validtor吧!
接著我為大家講解了如何使用spring module提供的validtor來執(zhí)行表單校驗(yàn),不過,由于spring不支持動(dòng)態(tài)command對(duì)象,所以,我們還無法象struts那樣不寫一行代碼也玩?zhèn)€完整的view層。
楊松發(fā)現(xiàn)appfuse中帶的spring module 1.0沒有validateWhen這個(gè)校驗(yàn)規(guī)則,不過,我們現(xiàn)在用的是spring module 6.0,不用擔(dān)心這個(gè)問題。
接著為大家講了struts中的文件上傳和spring mvc中的文件上傳,strtus的文件上傳很簡單,而spring mvc中的文件上傳稍微復(fù)雜一些,首先要在配置文件中配置CommonsMultipartResolver,spring mvc才會(huì)處理multipart的數(shù)據(jù)請(qǐng)求,接著就可以使用CommonsMultipartFile處理很大的上傳文件了,不用擔(dān)心數(shù)組越界的問題。王濤能夠接著我講解的思路說出ByteArrayMultipartFileEditor內(nèi)部其實(shí)就是調(diào)用了CommonsMultipartFile的getByte方法來實(shí)現(xiàn)將上傳的文件轉(zhuǎn)換成字節(jié)數(shù)組的,真是不錯(cuò),看來他已經(jīng)有了自己的編程感覺了,呵呵。
?
轉(zhuǎn)載于:https://www.cnblogs.com/dairongle97/archive/2006/12/07/2402151.html
總結(jié)
以上是生活随笔為你收集整理的11月30在spring mvc中使用Validator框架和文件上传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试面试题【2021模拟面试整理版(
- 下一篇: QT生成PDF文档