2012-02-16 62 views
3

目前我正在嘗試瞭解Spring MVC 3.1中表單提交/驗證/錯誤處理的正確工作流程。不,我有一些問題。Spring 3.1 MVC - 表單處理工作流最佳實踐

  1. 什麼是保留形狀誤差的正確方式,通過重定向綁定模型(有一個內置的方式 - 我還沒有找到一個)
  2. 我知道,我可以使用Spring表單標籤和JSR 303來驗證(包括i18n消息)提交的表單值。但是,在處理給定值時處理錯誤的正確方法是什麼? (例如,註冊是不可能的 - 電子郵件已經註冊)從Struts或非Java框架我知道像ActionErrors。在Spring MVC中做這件事的正確方法是什麼?
  3. 迭代通過「form:errors」標記可用的表單錯誤的正確方法是什麼?我只想顯示一個錯誤列表。

回答

1

1)在Spring 3.1,你可以使用RedirectAttributes。它們專爲Post/Redirect/Get screnario設計。你可以在這裏看到一個很好的例子:Spring - Redirect after POST (even with validation errors)

2)我認爲,JSR-303驗證的意思是簡單,自食其力,並相互獨立。雖然可以以訪問其他持久化實體的方式編寫它們,但這不是最佳實踐。我親自檢查控制器中的重複電子郵件。如果電子郵件已經存在 - 我添加一個新的FieldError BindingResult。

4

從參考文檔:

1)使用從FlashMap RequestContextUtils提供屬性。

2.) 當使用MVC命名空間時,JSR-303驗證程序會自動配置,假設類路徑上有一個JSR-303實現。任何ConstraintViolations會自動暴露爲可由標準Spring MVC窗體渲染的BindingResult錯誤標籤。

3.使用路徑= 「*」,列出所有的錯誤

<form:form> 
     <form:errors path="*" cssClass="errorBox" /> 
     <table> 
      <tr> 
       <td>First Name:</td> 
       <td><form:input path="firstName" /></td> 
       <td><form:errors path="firstName" /></td> 
      </tr> 
      <tr> 
       <td>Last Name:</td> 
       <td><form:input path="lastName" /></td> 
       <td><form:errors path="lastName" /></td> 
      </tr> 
      <tr> 
       <td colspan="3"> 
        <input type="submit" value="Save Changes" /> 
       </td> 
      </tr> 
     </table> 
    </form:form> 
+0

1.)非常感謝你幫助我。 2.)對於所有的JSR 303驗證,這是正確的,但是對於模型驗證背後的東西呢?例如對Web API的失敗請求。將這些錯誤暴露給視圖的正確方法是什麼? (沒有一些自定義的錯誤模型,我回到視圖)3.)這是正確的,但沒有辦法自定義form:errors的輸出。我想爲這些錯誤提供一些建議。 – 2012-02-17 06:35:37

+0

2)對RequestBodyNotValidException使用HandlerExceptionResolver。 3)使用BindErrorTag(spring:hasBindErrors),它暴露「errors」變量下的錯誤,並迭代$ {errors.allErros} – 2012-02-17 11:00:56

+0

非常感謝。 – 2012-02-17 12:10:35