尝试显示spring mvc验证错误时出现异常

时间:2012-05-05 06:15:41

标签: spring spring-mvc

我在这里使用3.1.1。

这很好用,表格正确显示

@RequestMapping(value={"/universities"}, params="new", method=RequestMethod.GET)
public String addUniversity(Model model) {
    model.addAttribute("addForm", AddForm.newUniversity());
    return "page/add-university";
}

测试验证错误时(通过清空字段),这会导致500内部服务器错误,并显示包含主消息的堆栈跟踪: BindingResult和bean名称'addForm'的普通目标对象都不可用作请求属性

这是方法:

@RequestMapping(value={"/universities"}, method=RequestMethod.POST)
public String submitNewUniversity(@Valid AddForm form, BindingResult binding) {
    if (binding.hasErrors()) {
        return "page/add-university";
    }

    // do others here ...
}

这是我的JSP:

<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" 
    session="false" %>

<s:url var="action" value="/universities" />
<sf:form method="POST" modelAttribute="addForm" action="${action}">         
   <fieldset> 
   <table cellspacing="0">
      <tr>
         <th><sf:label path="name">University:</sf:label></th>
         <td><sf:input path="name" size="30" /> <br/>
             <sf:errors path="name" cssClass="error" />
         </td>
      </tr>
      .....
</sf:form>

到目前为止,我研究过的是:

  • bean名称是正确的,在控制器和JSP磁贴中都是“addForm”。
  • 视图存在,因为显示表单工作正常。
  • JSP中的字段名称也是正确的,因为显示表单工作正常。
  • 参数的顺序很好,BindingResult遵循命令bean
  • 我确信submitNewUniversity是由我添加的日志的输出调用的

我想知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

发现它!

我改变了

@Valid AddForm form

@Valid @ModelAttribute("addForm") AddForm form

虽然这很好用,但我尝试删除注释并将表单名称更改为与请求属性相同的变量名称:

@Valid AddForm addForm

这仍然会引发同样的错误。

我想从现在开始我只需坚持使用@ModelAttribute。