2012-05-05 107 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從現在起。