今天机器一直处于假死状态,太慢了。没办法工作了,整理下硬盘然后充实下内容好了!
昨天写了controller的配置,现在来看看相关的业务对象和VM页面。老样子,先写下配置对象代码。
大家可以看到这里在属性上使用了@NotBlank注解,表示该值不能为空,当然还有很多其他的注解,这里就不一一介绍了,可以去google一下。通过这些注解,validator才可以对属性进行相关服务器校验。那对象属性怎么和页面进行绑定的呢,这里使用的是velocity模板,那么我们的spring.vm里面的宏就闪亮登场了。
VM页面中FORM如下:
我们以<td> #springFormInput("userVO.loginName" "οnblur='checkLogin();'")#springShowErrors("" "")</td>这段为例进行说明。
#springFormInput可以看到这个宏,它的作用是在velocity在最后渲染时,生成一个input type=text 的表单域,通过这个宏我们就可以将表单对象与业务对象中的属性进行关联了。
#springFormInput宏的源码如下:(位置在spring-webmvc-*.jar这个包的org.springframework.web.servlet.view.velocity目录下的spring.vm中,有兴趣可以看看其他的配置)
可以看到,这里定义了一个名为springFormInput,参数为$path 和$attributes,中间以空格分隔的宏,在宏里面通过springMacroRequestContext绑定了对象状态,同时生成一个表单输入域。
这样我们提交的内容就直接和userVO的loginName属性进行绑定了,剩下的springShowErrors则是在验证时出错后显示错误信息的宏,具体错误信息有默认错误信息,还可以通过注解定义也可以通过message.properties进行绑定(国际化嘛)。如:UserVO.user[not.blank]=密码或用户名不能为空(记得要通过native2ascii进行转码),如果要使用message.properties则需要在dispatcherServlet-servlet.xml中增加:
这样我们的SpringMVC基本上就算组成了。写得烂,只能自己看看了!