0

我无法在 jsp 页面上显示 spring 验证错误。这是我的代码。在 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>
4

2 回答 2

1

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

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

像下面这样的东西应该可以工作。

@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");
}
于 2013-08-20T13:50:47.903 回答
0

你能试试这个

public ModelAndView editTag(@ModelAttribute("Tag") Tag tag,BindingResult result) {
 result = new BeanPropertyBindingResult(tag, "tag");
于 2013-08-19T18:30:40.483 回答