Validation Spring MVC 3并将验证错误从@Valid返回到页面
我累了。在过去的两周里,我一直在做一个side Spring MVC项目,我发现文档充其量只是误导,所以我现在求助于寻求帮助。Sooooo。。。。。请帮忙 问题 我想弄清楚的是,为什么在下面的设置中,验证错误没有被发送回视图,也就是说,各种Validation Spring MVC 3并将验证错误从@Valid返回到页面,validation,spring-mvc,spring-3,spring-annotations,Validation,Spring Mvc,Spring 3,Spring Annotations,我累了。在过去的两周里,我一直在做一个side Spring MVC项目,我发现文档充其量只是误导,所以我现在求助于寻求帮助。Sooooo。。。。。请帮忙 问题 我想弄清楚的是,为什么在下面的设置中,验证错误没有被发送回视图,也就是说,各种frm:error(s)标记没有显示任何错误。我已经通过运行时调试检查了BindingResult参数到POST请求映射,错误就在那里。鉴于文档在这一点上充其量是含糊不清的,有谁能指出我放错了分号,或者告诉我我遗漏了什么秘密,以便将验证错误告知用户,告知他们个
frm:error(s)
标记没有显示任何错误。我已经通过运行时调试检查了BindingResult参数到POST请求映射,错误就在那里。鉴于文档在这一点上充其量是含糊不清的,有谁能指出我放错了分号,或者告诉我我遗漏了什么秘密,以便将验证错误告知用户,告知他们个人的不足之处
作为奖励,如果有人知道如何修改自动枚举验证,以便我可以从消息包中添加我自己的验证错误消息,我将不胜感激
请记住,我试图保持这个纯春季MVC3.0。我在2.5.6上做得很好,但我几乎没有使用注释,所以这个项目和其他项目一样是一个学习练习。我喜欢纯3.0注释之类的东西,尽管我的大脑正在反抗那些在梦中嘲弄我的文档,让我想放弃命令对象,将HttpServletRequest设置为我唯一的RequestMapping参数,并完成了它
堆栈:
弹簧3.0.6瓷砖2.2.2
玻璃鱼3.1.1 守则: Spring app servlet.xml
<context:component-scan base-package="com.facets.w101.almanac.spring"/>
<mvc:annotation-driven/>
... other stuff
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="messages" />
<bean id="userValidator" class="com.mycmpny.UserValidator" />
... other stuff
JSP代码
@Resource(name="userValidator")
private UserValidator userVldr;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(this.userVldr);
}
@RequestMapping(value = "/newuser", method = RequestMethod.GET)
public String newUserSetup(ModelMap model) {
model.addAttribute("newUser", new User());
return "newuser";
}
@RequestMapping(value = "/newuser", method = RequestMethod.POST)
public ModelAndView newUserSave(@ModelAttribute @Valid User user, BindingResult result) {
ModelAndView mav = new ModelAndView("newuser");
mav.addObject("newUser", user);
if(result.hasErrors()) {
return mav;
}
/* Code that saves user */
return mav;
}
<frm:form method="POST" commandName="newUser">
<frm:errors path="*" cssClass="errorblock" element="div" />
<frm:label path="name">Name:</frm:label>
<frm:input path="name" id="userName" /><frm:errors path="name" /></td>
<frm:label path="type">User Type:</frm:label>
<frm:select path="type">
<frm:option value="-" label="Please Select..."/>
<frm:options />
</frm:select><frm:errors path="type" />
姓名:
用户类型:
注释
,以使userValidator根据全局化,但由于某些原因,用户验证器从未被找到、加载或使用。我尝试过在[appname]-servlet.xml
和main.beandef.xml
文件中进行配置,但没有成功。所以我求助于@InitBinder方案BindingResult
作为方法参数,那么整个验证过程就会发生,并且不会返回到带注释的请求方法,而是抛出一个包含验证错误的异常,Spring会尝试将浏览器发送到404页面。您必须将BindingResult(或者可能是其他一些spring对象)作为参数(现在完全是!)没有被记录frm:select
spring标记作为命令对象的枚举数据成员,并添加属性less
子标记,spring将自动使用选项填充下拉选择,这些选项的值和文本设置为枚举的getName
值。我还没有找到如何将自定义资源包消息绑定到它。无论如何,此功能完全没有文档记录public ModelAndView newUserSave(@ModelAttribute("newUser") @Valid User user, BindingResult result) {
.
.
}