使用spring <form:errors> </form:errors>无法显示错误

时间:2013-08-19 16:36:13

标签: spring spring-mvc spring-annotations

我无法在jsp页面上显示弹出验证错误。这是我的代码。在jsp页面上,当我输入一个空名称时,控制器代码会返回一个有错误的ModelAndView,它只是不会在jsp页面上显示它。

非常感谢任何帮助。谢谢!

@RequestMapping(value = "/editTag.htm", method = RequestMethod.POST)
public ModelAndView editTag(@ModelAttribute("Tag") Tag tag) {
    BindingResult result = new BeanPropertyBindingResult(tag, "tag");
    ValidationUtils.rejectIfEmptyOrWhitespace(result, "name", "field.required", "Tag Name is required");
    if (result.hasErrors()) {
    return new ModelAndView("tag.edit").addObject("tag",tag).addObject("errors", result);
    }

    tagDao.merge(tag);

    return new ModelAndView("redirect:/tags/listTags.htm");
}




<form:form commandName="tag">
    <form:errors path="name"/><br />
    <form:input path="name" size="30" />
    ...
</form:form>

2 个答案:

答案 0 :(得分:1)

您正在构建一个新的BindingResult,而Spring已经提供了一个(并在后台使用)。只需在@ModelAttribute注释参数之后立即将BindingResult添加到方法即可。然后,您可以从结果中获取模型,并使用它来构建ModelAndView。

另请注意,ModelAttribute名称(当前为Tag)与表单(tag)中使用的名称不匹配。那两个应该匹配。

以下内容应该有效。

@RequestMapping(value = "/editTag.htm", method = RequestMethod.POST)
public ModelAndView editTag(@ModelAttribute("tag") Tag tag, BindingResult result) {
    ValidationUtils.rejectIfEmptyOrWhitespace(result, "name", "field.required", "Tag Name is required");
    if (result.hasErrors()) {
      return new ModelAndView("tag.edit", result.getModel());    
    }

    tagDao.merge(tag);

    return new ModelAndView("redirect:/tags/listTags.htm");
}

答案 1 :(得分:0)

你能试试吗

public ModelAndView editTag(@ModelAttribute("Tag") Tag tag,BindingResult result) {
 result = new BeanPropertyBindingResult(tag, "tag");