【问题标题】:Spring 3 MVC - form:errors not showing the errorsSpring 3 MVC - 表单:错误未显示错误
【发布时间】:2011-02-21 02:11:03
【问题描述】:

我正在使用基于注释的验证,但对于其中一种表单,我无法使用 form:errors 标记显示任何错误。当我调试该方法时,我可以看到BindingResult 有错误,但由于某种原因它没有显示在表单上。我很困惑,因为我已经让它在其他表格上工作,但由于某种原因,这个特殊的表格有问题。任何指针都非常感谢。

这是来自控制器的一些代码,我在控制器中也将 copyCartForm 作为 @SessionAttribute:

@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST)
public String copyCart(@Valid CopyCart copyCartForm, BindingResult result) {
    if (result.hasErrors()) {
        logger.debug("errors in form" + result.toString());
        return "copyshoppingcart";
    } else {
                    ...
                    ...
        return "redirect:/home";
    }
}

在 JSP 中我试过这个:

<form:errors path="*" cssClass="formError"/>

还有:

<form:errors path="fieldName" cssClass="formError"/>

都不行。

【问题讨论】:

  • 最好向我们展示您的 JSP 代码。
  • 我必须使用@ModelAttribute 才能使其正常工作。所以表格前面是@ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result) 不知道为什么?在其他地方,没有它也可以工作。

标签: spring-mvc spring-annotations


【解决方案1】:

我必须使用@ModelAttribute 才能使其正常工作。所以表格前面是@ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)

【讨论】:

  • 这对我有用。似乎如果您的模型属性名称 (copyCartForm) 与模型的类名称 (copyCart) 不匹配,则您必须将其指定为 @ModelAttribute 属性的参数。
  • 嘿!谢谢,我现在正在调查这个问题,即使我在模型上添加了诸如 notnull 等注释,我的 bindingResult.hasErrors() 似乎也没有返回任何内容。
【解决方案2】:

另一种方法,如果由于某种原因你不能使用@ModelAttribute("copyCartForm") 时使用follow:

@RequestMapping(method=RequestMethod.POST)
public String post(@Valid CopyCart copyCartForm, BindingResult bindingResult, ModelMap modelMap) {
    if (bindingResult.hasErrors()) {
        modelMap.put(BindingResult.class.getName() + ".copyCartForm", bindingResult);
        return "copyshoppingcart";
    }
    return "redirect:/home";
}

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。

    我必须使用 @ModelAttribute("attributeName") 来获取验证错误作为响应。

    【讨论】:

      【解决方案4】:

      我不知道为什么,在我弄明白之前我受了很多苦,但是你必须将你的 bean 命名为你的 bean 类。所以 copyCartForm 应该只是 copyCart。

      @RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST)
      public String copyCart(@Valid CopyCart copyCart, BindingResult result) {
          if (result.hasErrors()) {
              logger.debug("errors in form" + result.toString());
              return "copyshoppingcart";
          } else {
                          ...
                          ...
              return "redirect:/home";
          }
      }
      

      这也必须在表单标签上进行更改:

      <form:form action="....." method="..." commandName="copyCart">
      

      【讨论】:

        【解决方案5】:

        您需要将此依赖项添加到您的 pom.xml:

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
            </dependency>
        </dependencies>
        

        【讨论】:

          猜你喜欢
          • 2014-03-28
          • 1970-01-01
          • 2012-04-28
          • 2011-08-30
          • 2012-03-29
          • 2011-07-21
          • 1970-01-01
          • 1970-01-01
          • 2016-01-07
          相关资源
          最近更新 更多