Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation Spring MVC 3并将验证错误从@Valid返回到页面_Validation_Spring Mvc_Spring 3_Spring Annotations - Fatal编程技术网

Validation Spring MVC 3并将验证错误从@Valid返回到页面

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请求映射,错误就在那里。鉴于文档在这一点上充其量是含糊不清的,有谁能指出我放错了分号,或者告诉我我遗漏了什么秘密,以便将验证错误告知用户,告知他们个

我累了。在过去的两周里,我一直在做一个side Spring MVC项目,我发现文档充其量只是误导,所以我现在求助于寻求帮助。Sooooo。。。。。请帮忙

问题 我想弄清楚的是,为什么在下面的设置中,验证错误没有被发送回视图,也就是说,各种
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" />

姓名:
用户类型:
注释

  • 我试图在Spring配置文件中使用
    ,以使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) {
    .
    .
    }