快速业务通道

Spring MVC的表单控制器 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

我们“惊讶地”发现入参列表并没有包括需要校验的目标表单对象,那如何对目标表单对象实施校验呢?原来目标对象已经包含在errors对象中,在校验方法内部会从errors中取得目标方法并施加校验。

在④处,我们通过正则表达式对Email格式进行校验。我们直接使用JDK 1.4 java.util.regex包中提供的正则表达式工具类完成校验的工作。由于Email模式是固定的,为了提高性能,我们在①处用final static的方式定义了一个Email合法模式的Pattern对象。

编写好UserValidator,我们需要将其装配到UserRegisterController控制器中,其配置如下所示:

<bean name="/registerUser.html" class="com.baobaotao.web.user.UserRegisterController"> <property name="bbtForum" ref="bbtForum" /> <property name="formView" value="register" /> <property name="successView" value="registerSuccess" /> <property name="validator"> ①装配校验器 <bean class="com.baobaotao.domain.UserValidator" /> </property> </bean>

在①处我们通过validator指定了一个对User表单对象进行校验的校验器,如果你有多个校验器类(很少见),可以通过validators属性进行指定。

Spring MVC的表单控制器(5)

时间:2011-03-14 陈雄华

我们通过UserValidator可以很好地完成User对象属性值的格式检查,可是仔细想想是否还存在遗漏呢?也许你已经指出:userName不能和数据库中已有用户名重复!你当然可以在UserValidator中通过注入业务对象完成userName重复性的校验,但对于这种需要通过业务对象完成的校验操作,一种更好的方法是通过覆盖控制器的onBindAndValidate()方法,直接在控制器中提供检验。这带来了一个好处,UserValidator无需和业务对象打交道,而UserRegisterController本身已经拥有了业务对象的引用,所以调用业务对象执行校验非常方便。下面的代码展示了UserRegisterController中onBindAndValidate()的内容:

代码清单 5 UserRegisterController#onBindAndValidate()通过业务对象完成校验

package com.baobaotao.web.user; … public class UserRegisterController extends SimpleFormController { … @Override protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception { User user = (User) command; if (bbtForum.isExsitUserName(user.getUserName())) {①通过业务对象完成检验 errors.rejectValue("userName", "exists.userName", "用户名已经存在"); } } }

我们在UserRegisterController覆盖了父类的onBindAndValidate()方法,通过BbtForum业务对象的方法判断userName是否已经被占用,如果已经被占用,将相应错误添加到errors对象中。

通过错误标签显示错误

当存在合法性检查错误时,请求被导向到formView的表单页面中。但是如果register.jsp表单页面没有做任何配合操作,校验错误的信息就象空气和电磁波一样,虽然存在但却看不到,如果我们在register.jsp中相应地添加一些Spring错误标签这面魔法镜,错误信息就现形了。下面我们对register.jsp视图文件进行调整,加入显示校验错误的标签:

代码清单 6 register.jsp:添加错误标签

… <form:form> 用户名:<form:input path="userName" /> <font color="red"><form:errors path="userName" /></font>①userName的校验错误

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号