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

首先回顾了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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MapReduce其他功能

1. 计数器应用计数器是用来记录job的执行进度和状态的。MapReduce 计数器(Counter)为我们提供一个窗口,用于观察 MapReduce Job 运行期的各种细节数据。对MapReduce性能调优很有帮助,MapReduce性能优化的评估大部分都是…

用树莓派和PC机搭建多节点私人以太坊网络

发现国内很少有树莓派和电脑组建的私人区块链,所以在自己做实验的过程中记录下来分享给大家,第一次写博客,哈哈 以太坊私有链搭建(电脑,树莓派端都适用) (1)新建一个文件夹,例如myc…

CentOS6 YUM安装MariaDB10.3.10

1、先新增加一个MariaDB.repo vi /etc/yum.repos.d/MariaDB.repo[mariadb] name MariaDB baseurl http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos6-amd64/ gpgkey http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck1 官网地址特别慢,所…

统一配置数据库连接符的方法

统一配置数据库连接符的方法 统一配置数据库的方法一.Web.config(应用方便,安全性差)1.Web.config文件<appSettings><add key"strconn" value"serverlocalhost;databasedlcusmgt;uidsa;pwd"/></appSettings>2.调用文件dim strconn as st…

JIRA的text编辑模式

无意中看到了开发经理描述的一个缺陷&#xff0c;descrption里添加了图片&#xff0c;添加了代码&#xff0c;格式非常规整 尝试了图片是可以插入的&#xff0c;但是代码不知道怎么插入的&#xff0c;于是问了下他&#xff0c;当然非常详细的截图抛过来了&#xff0c;告诉我详细…

FusionInsight LibrA V100R002C80SPC300安装指南

FusionInsight LibrA是企业级的大规模并行处理关系型数据库。FusionInsight LibrA采用MPP(Massive Parallel Processing)架构&#xff0c;支持行存储与列存储&#xff0c;提供PB(Petabyte&#xff0c;2的50次方字节)级别数据量的处理能力。FusionInsight LibrA在核心技术上跟传…

女人跳槽:最重要的是你的独立,你的快乐

工作并非证明女人活着的唯一证据。尤其是眼下这一个工作。或者是因为追求更好&#xff0c;或者是因为放弃更坏。一份工作如同一段感情&#xff0c;你不要它&#xff0c;说明它不够好到留住你。没有婚姻好过坏的婚姻&#xff0c;没有工作好过让你天天流泪的工作。如果实在不满意…

云托管,边缘物理计算托管物理计算,你所需要了解的……

随着业务发展&#xff0c;传统数据中心建设复杂性越来越高&#xff0c;基建的管理、设备的繁杂、人力成本的提升&#xff0c;是否让你的运维成本越来越高&#xff1f;企业生产效率却越来越低&#xff1f; 业务快速发展&#xff0c;设备采购周期冗长&#xff0c;大量采购造成CAP…

闲话WPF之十(Dependency属性 [2] )

在前一个Post中&#xff0c;曾提到将要重点研究Dependency属性的三个方面&#xff1a;变化通知&#xff1b;属性值的继承&#xff1b;支持多个提供对象。下面&#xff0c;我将分别就这三个内容进行简单地说明。【变化通知】 在任何时候&#xff0c;只要Dependency属性的值发生了…

1037 Magic Coupon

题目链接&#xff1a;https://pintia.cn/problem-sets/994805342720868352/problems/994805451374313472 这个题目有毒&#xff0c;开始我的while判断是使用的相乘大于0这种判断方式&#xff0c;但是最后一个案例始终过不了&#xff0c;可能是因为越界了&#xff0c;但是越界的…

利用解构赋值获取后端特定字段数据

很多时候&#xff0c;后端接口传过来的数据并不正好是我们需要的。有些场景下会有很多不需要的字段。 这时如果采用单个赋值的方法赋值数据无疑会比较麻烦。解决的办法就是利用解构赋值。 mounted(){let objs {name:test,sex:nan,caree:kaifa,height:180,country:country};({na…

理解ORACLE数据库字符集

一&#xff0e;引言 ORACLE数据库字符集&#xff0c;即Oracle全球化支持(Globalization Support)&#xff0c;或即国家语言支持&#xff08;NLS&#xff09;其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持&#xff0c;ORACLE为用户提供自己熟悉的数据库母语环…

软件设计师09-面向对象-用例图

感谢任铄老师滴视频 用例图 1&#xff09;描述一组用例、参与者及它们之间的关系 2&#xff09;用例模型用于需求分析阶段 3&#xff09;关系&#xff08;依赖关系&#xff09;&#xff1a;1&#xff09;包含&#xff08;include&#xff09; 1&#xff09;两个以上用例具有共同…

利用正则表达式截取特定字符中间字符

有如下场景&#xff0c;已知一个长字符串&#xff0c;需要获取指定字符串之间的字符。 // 已知字符串 var str body908888huhuc实测实《hu需要body和《hu之间的字符串。定义正则表达式。 var reg /(?<body).(?《hu)/;上述正则表达式利用了&#xff1a;获取指定字符串之后…

资源的积累

最近整理机器里边的各种文档&#xff0c;进行异地备份&#xff0c;整理后&#xff0c;看了看尺寸&#xff0c;天呀&#xff0c;竟然有855M&#xff0c;主要是各种文档、图片和代码等非2进制的东东。我按照日期整理了一下&#xff0c;最久的大概是在2003年&#xff0c;公司是在2…

【MySQL】4、Select查询语句

4.Select查询语句 4.1、select语句 <?php $servername "localhost"; $username "username"; $password "password"; $dbname "myDB";// 创建连接 $conn mysqli_connect($servername, $username, $password, $dbname); // Che…

一、环境调试确认

1、确认系统网络 2、确认yum可用 3、确认关闭iptables规则 4、确认停用selinux 两项安装 yum -y install gcc gcc-c autoconf pcre pcre-devel make automake yum -y install wget httpd-tools vim 一次初始化 cd /opt/ mkdir app backup download logs work转载于:https…

JavaScript方法

1、hasOwnProperty&#xff1a;是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是&#xff0c;此方法无法检查该对象的原型链中是否具有该属性&#xff0c;该属性必须是对象本身的一个成员。isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实…

Ajax:如何运用updatepanle进行局部刷新

1.设定ScriptManager的EnablePartialRendering"true"(一般默认为true)2.设定要进行局部刷新panel的UpdateMode"Conditional"(本panel 的id为zz) 这样就可以保在本panle内的控件操作refresh页面时&#xff0c; 不会将整个page刷新&#xff0c;而刷新本pan…

Shell语法—— while 条件语句

while 循环语句 while 循环语句语法格式为&#xff1a; while < 条件表达式 > do指令 done 有关脚本运行的相关用法 命令说明sh file.sh &把 file.sh 脚本放到后台运行&#xff08;后台运行脚本的常用方法&#xff09;ctlc停止执行当前脚本或任务ctlz暂停执行当前脚本…