Spring MVC为我们提供了类似struts validator的验证框架,但spring并非编写xml验证文件,而且是实现期自身提供的Validator接口,为我们的POJO javabean提供针对具体类的验证,非常方便,下面,我们就一起来实现这个功能
首先,我们先编写一个注册页面,只有两个字段,姓名和性别,这里要求姓名和性别都必须输入,而且性别只能输入0或1
register.jsp
其中关于Spring bind标签和jstl标签可以先暂时忽略,后面酱油详细介绍
然后编写我们的表单对应POJO JavaBean
Student.java
编写我们的控制器controller
RegisterStudentController.java
这个控制室是在我们通过验证后,将表单输入的内容显示在一个成功页面中,页面逻辑名用getSuccessView()获得,从spring配置文件中注入
线面编写我们的
验证根据errors对象返回错误,我们有两种定制errors的方法
(1) errors.rejectValue("name","notnull",null, "用户名长度必须输入!");
rejectVlaue方法有4个参数:
1. Error Code 显示错误时,将根据错误代码识别错误信息类型。
2. Message Key上面关于ApplicationContext 的国际化支持时, 我们曾经谈及MessageSource的使用,
这里我们可以通过引入MessageSource实现提示信息的参数化,此时,本参数将用作.properties文件
中的消息索引。
3. Error Argument 如果提示信息中需要包含动态信息,则可通过此参数传递需要的动态信息对象。具
体参见ApplicationContext中关于国际化实现的描述。
4. Default Message
如果在当前MessageSource中没有发现Message Key对应的信息数据,则以此默认值返回。
这里我们暂时尚未考虑国际化支持,所有的信息都将通过Default Message返回
(2) ValidationUtils.rejectIfEmpty(errors, "name", "name", "姓名必须输入");
其中一下部分是用ORO正则表达式验证类库进行sex字段的正则验证
配置文件:
web.xml
train-servlet.xml
我们用
<property name="validator">
<bean class="model.StudentValidator"></bean>
</property>
来定义验证类
用
<property name="commandClass">
<value>model.Student</value>
</property>
来定义验证框架需要验证的类(这个属性对我们在页面上显示错误信息有用)
线面说明一下registe.jsp的两端代码
(1)
用spring:bind标签绑定Student类(由于在配置文件中配置了commandClass),我们在这里可以使用command.*代替Student.*,使用jstl迭代显示出errors对象中的所有错误信息
</spring:bind>
(2)
使用spring帮顶student的name属性,如果其error对象不为空,则单独显示这个属性的error信息
最后一个是个注册成功页面 success.jsp
值得注意的是:我们要从register.mvc来启动程序,转发到register.jsp(配置文件中的fromView属性配置),否则spring:bind标签会出现如下异常:
Neither BindingResult nor plain target object for bean name 'command' available as request attribute
部署,运行
(1)不输入姓名和性别,页面如下:
错误: 姓名必须输入
错误: 性别必须输入
错误: 性别格式错误
name: (必须输入) 错误: 姓名必须输入
sex: (必须输入,且为0或1) 错误: 性别必须输入 性别格式错误
(2)输入姓名,不输入性别,页面如下:
错误: 性别必须输入
错误: 性别格式错误
(3)不输入姓名,输入正确性别,页面如下:
错误: 姓名必须输入
(4)输入姓名,输入错误性别,页面如下:
错误: 性别格式错误
(5)都正确输入,页面如下: 11-----1