Spring MVC使用MultiActionController搭配Validator校验表单

来源:互联网 发布:2016中国进出口数据 编辑:程序博客网 时间:2024/06/07 08:27

贴出来以告慰下午的好几个小时, 网上的一些解决办法,有的可以验证,但是不能显示errors.

因为是继承MultiActionController,所以在配置文件中就没法制定自己的command名称,导致form中commandName只能为command,不能修改,否则返回信息时提示找不到制定的commandName。

首先bean的定义要有validators

<bean id="LoginController" class="com.libra.web.control.LoginController"><property name="methodNameResolver" ref="paramMethodResolver"/><property name="validators"><list><bean class="com.libra.web.domain.UserValidator"></bean></list></property></bean>

validator的编写比较固定

public class UserValidator implements Validator {public boolean supports(Class clazz) {return User.class.equals(clazz);}public void validate(Object obj, Errors errors) {ValidationUtils.rejectIfEmpty(errors, "username", null, "用户名不能为空");ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为空");}}

jsp页面的编写要注意变量名和commandName

<sf:form method="post" commandName="command"  action="${pageContext.request.contextPath}/login.htm?action=submit" >     <table>    <tbody>    <tr><td>用户名:</td>    <td><sf:input path="username"/></td>    <td><sf:errors path="username"/></td></tr>    <tr><td>密码:</td>    <td><sf:input path="password"/></td>    <td><sf:errors path="password"/></td></tr>    <tr><td></td><td><input type="submit" value="登陆" name="submit"/></td></tr>    </tbody>    </table></sf:form>

在继承MultiActionController的类中的处理方法,要注意先手动绑定command,其次调用validator的验证,最后要将验证后的command绑定到ModelAndView

public ModelAndView submit(HttpServletRequest req, HttpServletResponse resp)throws Exception {// validationUser user = (User) newCommandObject(User.class);ServletRequestDataBinder binder = createBinder(req, user);binder.bind(req);Validator[] validators = getValidators();if (validators != null) {for (Validator validator : validators) {if (validator.supports(User.class)) {ValidationUtils.invokeValidator(validator, user, binder.getBindingResult());}}}if (binder.getBindingResult().hasErrors())return new ModelAndView("login").addAllObjects(binder.getBindingResult().getModel());return new ModelAndView("main");}

以上方法验证有效,效果图如下:


这里是一个总结,但是细节流程还没有检查,如果有什么问题,可以留言。

原创粉丝点击