Spring MVC 中给我们提供了一个AbstractCommandController的抽象类,继承该类的Controller并重写handler方法这样我们就能接收域模型对象了,注意该方法签名为
其中我们的Command对象就是域模型对象了,在继承了AbstractCommandController的子类中我们应该首先在构造方法中设置模型对象,如下:
这里查看下我们的Employee类的代码:
这里省略了get,set方法。假设我们有一个登陆的需求,那么页面的简单设计应该为:
注意,这里的input标签中的name属性应该和我们Employee类中的属性相对应。
当点击提交之后则会进入我们相应的controller中处理。
这样我们就完整的了解了一个登陆请求的流程。可是如果我们在登陆中输入了空字串或者非法的字串又该如何解决呢?其实Spring为我们提供了一个Vaildator接口,专门用来做验证的,我们可以实现它,做一系列的验证规则。在这里的例子中,我们是要对Employee进行验证:
这里说明一下ValidationUtils.rejectIfEmpty方法中的第二个参数,这里表示的是我们employee对象中的哪一项属性正在被验证,如果填写错误的话(譬如我们将name改成sssname),将出现Invalid property 'sssname' of bean class [org.jst4me.spring.mvc.entites.Employee]: Bean property 'sssname' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 这样的异常。配置好Log4j.properties文件,在登陆的Controller中测试,如果我们的登陆中不输入密码,控制台中打印 ValidationUtils - Validator found 1 errors 说明我们的校验器发现了1个错误. 刚才忘了说明一点的是,我们自己写的校验器要作用于某个Controller中,我们必须将它注入进controller,如下:
第一步先将自己写的校验器配置成Bean,然后将其注入到我们的Controller中。这样校验器就可以工作了。这里我做的时候继承的是AbstractCommandController,其实对于表单的这样的页面需求我们采用SimpleFormController 将更加的方便。我会在近期列举出SimpleFormController的使用方式以及声明式的验证规则供大家学习和交流。