首先回顾了spring mvc中的表单验证和业务逻辑校验失败后,回到表单页面中显示错误信息的整个内部运行流程。
表单校验出错后回到表单注册页面是由默认的SimpleFormController的processFormSubmission方法自动完成的,王涛忘记这一点,他们覆盖了processFormSubmission方法,直接在processFormSubmission方法中执行业务逻辑校验,结果导致表单校验失败后不能回到表单注册页面。
查看帮助文档,可以了解到SimpleFormController的详细工作流程,特别是看onSubmit(Object command,BindException errors)这个方法的帮助,就知道怎样写业务逻辑校验失败的代码了。
protected ModelAndView onSubmit(Object command,
                                BindException errors)
{
  errors.addError(new FieldError("name","用户名重复"));
  return new ModelAndView(this.getFormView(),errors.getModel());
}
接着分析了onSubmit方法与doSubmitAction方法的应用区别。

讲解了如何将Validator框架集成到spring中的设计思想:
class MyValidator implements Validator
{
 boolean supports(Class clazz)
 {
  为什么不能使用:UserCommand.class.equals(clazz);?
  这主要是因为Class没有覆盖equals方法。
 }

void validate(Object obj,Errors errors)
 {
 }
}
编写的校验方法的定义应该如下:
public static boolean validateFloatRange(java.lang.Object bean,
                                         ValidatorAction va,
                                         Field field,
                                         Errors errors)
{
          ......
}
所以,MyValidator类的validate(Object obj,Errors errors)方法应编写成如下形式“
 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框架而编写的对表单信息进行校验的代码和这次使用validator框架编写的代码,哪个更复杂,他愿意采用哪个?显然,使用validator框架编写的代码更复杂、他更愿意用以前的方式进行表单校验,那我们为什么要使用validator框架呢?这是为了实现代码重用和校验逻辑的封装和配置使用。如果他想在公司做到更高的开发职位,他想拿到更多的工资,他就应该使用validator框架,这样,其他级别低的程序员可以不写校验代码了,而直接在validator框架中插入魏奕东写的校验方法,老板就会将从其他人身上省下的一部分工钱装入到魏奕东的口袋,呵呵!

魏奕东,别高兴得太早!你想干的这份工作,早就有人干了,这就是spring module,它模仿struts实现的validator框架,实现了调用validator框架的sring mvc的Validator,现在,我们就来看看如何使用spring module提供的validtor吧!

接着我为大家讲解了如何使用spring module提供的validtor来执行表单校验,不过,由于spring不支持动态command对象,所以,我们还无法象struts那样不写一行代码也玩个完整的view层。

杨松发现appfuse中带的spring module 1.0没有validateWhen这个校验规则,不过,我们现在用的是spring module 6.0,不用担心这个问题。

接着为大家讲了struts中的文件上传和spring mvc中的文件上传,strtus的文件上传很简单,而spring mvc中的文件上传稍微复杂一些,首先要在配置文件中配置CommonsMultipartResolver,spring mvc才会处理multipart的数据请求,接着就可以使用CommonsMultipartFile处理很大的上传文件了,不用担心数组越界的问题。王涛能够接着我讲解的思路说出ByteArrayMultipartFileEditor内部其实就是调用了CommonsMultipartFile的getByte方法来实现将上传的文件转换成字节数组的,真是不错,看来他已经有了自己的编程感觉了,呵呵。

转载于:https://www.cnblogs.com/dairongle97/archive/2006/12/07/2402151.html

11月30在spring mvc中使用Validator框架和文件上传相关推荐

  1. SSM框架之Spring MVC(三)http响应、文件上传

    一.响应数据和结果视图 1.1 返回值分类 1.1.1 字符串 创建实体类和controller类 实体类User package cn.xiaomifeng1010.domain;import ja ...

  2. ssm 上传图片到mysql_ssm(Spring+Spring MVC+MyBatis)+Web Uploader开发图片文件上传实例,支持批量上传,拖拽上传,复制粘贴上传...

    项目描述 ssm开发一个上传图片的项目 用百度的插件 Web Uploader 上传,不会的去它的官网找API文档 官网的API文档还是比较 坑的.... 百度插件  Web Uploader 上传文 ...

  3. 11月21日spring mvc的表单校验培训日记

    看到HtmlFilter中的一段代码: StringBuffer result = new StringBuffer(content.length + 50); 顺便问问学员们其中的一些思想和原因,结 ...

  4. [RFC1867] HTML中基于表单的文件上传

    网络工作组:E. Nebel 征求意见:1867 L. Masinter 类别:试验 施乐公司 十一月 1995 HTML中基于表单的文件上传 这个备忘录的状态 这个备忘录为互联网社区定义了一个试验协 ...

  5. php利用ajax文件上传,如何在PHP中利用AjaxForm实现一个文件上传功能

    如何在PHP中利用AjaxForm实现一个文件上传功能 发布时间:2020-12-18 14:52:38 来源:亿速云 阅读:94 作者:Leah 如何在PHP中利用AjaxForm实现一个文件上传功 ...

  6. winform中通过FileStream实现将文件上传

    winform中通过FileStream实现将文件上传 本实例实现功能:通过OpenFileDialog选择待上传的文件,并将所选文件的完整路径绑定到TreeView控间中显示,然后通过FolderB ...

  7. 在PHP中通过POST方法实现文件上传功能

    (本文内容属于转载,原文链接http://blog.sina.com.cn/s/blog_4fe447d501009rzh.html) 在PHP 5中通过POST方法实现文件上传非常简单,可以上传文本 ...

  8. spring_在Spring MVC中使用多个属性文件

    spring 每个人都听说过将单个Web应用程序组合成一个大型Web应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容是在单个服务中获取的,大部分都显示在单个网页中. 门户软 ...

  9. 在Spring MVC中使用多个属性文件

    每个人都听说过将单个Web应用程序组合成一个大型应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容在单个服务中被拾取,大部分显示在单个网页中. 门户软件还允许在嵌入到门户软件 ...

最新文章

  1. linux下搭建mrbs会议室预定管理系统
  2. springmvc静态资源拦截与访问
  3. [转载]AxureRP 7.0部件详解(一)
  4. windows7下darknet配置yolov3训练及测试完整教程
  5. Redis源码分析之anet网络通信的封装
  6. 证书体系: PFX 文件格式解析
  7. screw-plus实现php代码安全
  8. 使用NoSQL Manager for MongoDB客户端连接mongodb
  9. JS/JQuery操作iframe元素
  10. 基于DEAP库的python进化算法-5.遗传算法求解TSP问题的改进
  11. PDF reference 1.0-1.7 下载(免费)以及PDF结构介绍
  12. Openssl(版本1.1.1)源码中的RSA加解密算法实现分析
  13. UWP-Naïve Media Player 2.0
  14. 科沃斯扫地机器人抓不转_科沃斯扫地机器人一边转一边不转什么原因 科沃斯扫地机器人常见...
  15. 在华为云服务器上用WP搭建公司官网
  16. 相见恨晚的超实用网站
  17. 一个人怎么写大型软件
  18. 安卓逆向013之DDMS去广告(车来了)
  19. PDF文件怎么插入空白页面
  20. 【Excel神技】之 下拉列表

热门文章

  1. const和define 区别
  2. linux:将job放在后台执行的方法
  3. Programming C#.Classes and Objects.只读字段
  4. spring in action 读书笔记
  5. Android 开发(一)项目概况
  6. 如何做个人职业规划和年度计划
  7. 网络工程师之广域网必胜篇一
  8. 2018 年视频监控企业竞争力分析 海康威视连续七年蝉联全球第一
  9. GDB调试core文件样例(如何定位Segment fault)
  10. get_metrology_object_result 获取计量模型的测量结果