2012-05-05 82 views
1

我在此处使用3.1.1。尝试显示弹簧mvc验证错误时发生异常

也能正常工作,形式被正确

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

dislayed当测试验证错误(通过清空字段),这导致500内部服务器错误,并且与主消息显示踪迹: 为bean名称“addForm”可作为请求属性既不BindingResult也不纯目标对象

这是方法:

@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的名称是正确的,这是 “addForm”,无论是在控制器和JSP瓦。
  • 视图存在,因为显示表单工作正常。
  • JSP中的字段名称也是正确的,因为显示表单工作正常。
  • 参数的顺序都很好,BindingResult如下命令豆
  • 我敢肯定,submitNewUniversity通过日志的输出I加

叫我不知道我做错了什么吗?

回答

1

找到了!

我从

@Valid AddForm form 

改为

@Valid @ModelAttribute("addForm") AddForm form 

虽然这个工作得很好,我试图去除所述注释和改变形式名称是相同的变量名称作为请求属性:

@Valid AddForm addForm 

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

我想我只需要坚持@ModelAttribute从现在起。