我猜測全局錯誤是ObjectErrors的另一個名字 因爲getGlobalError()返回一個ObjectError。
其實「全局錯誤」是任何ObjectError
這是不是一個FieldError
的實例看getGlobalErrors()
什麼會我丟失,如果我只登錄FieldErrors source?
任何ObjectError
如果代碼註冊爲「全局錯誤」,例如通過呼籲BindingResult.reject(errorCode, errorArgs, defaultMessage)
。
另請參閱javadoc的rejectValue(field, errorCode, errorArgs, defaultMessage)
。通常,錯誤是根據驗證/綁定對象的字段(例如,其屬性與Spring表單標記的modelAttribute
標記匹配的模型值)而不是對象本身進行註冊的。
以下是幾種方法來創建全局錯誤:
假設它的根表單對象,而不是多數民衆贊成被通過Spring Validator
implementation驗證一個嵌套的對象,您可以添加一個「全球性的錯誤」(以指定的綁定根對象的上下文)通過傳遞null作爲字段名稱參數rejectValue
。但是,如果要驗證的對象是嵌套對象,則將針對嵌套對象字段註冊FieldError
。因此,關於是否添加了常規的ObjectError
或特定的FieldError
,目標Errors
對象的nestedPath
(「嵌套對象圖」)屬性至關重要。
通過在類級應用的JSR 303約束註釋。請參閱example,其中檢查模型對象是否存在於數據存儲中。
下面是一個例子,以引用全球VS現場級錯誤:
然後顯示在視圖中含有全球和字段的錯誤該標籤:
<spring-ext:overflowErrors name="newModelObject">
<div class="row">
<div class="large-12 columns">
<div class="alert panel">
<c:if test="${overflowErrors.size()>0}">
<p>There are multiple errors with your entry.</p>
<c:forEach var="error" items="${overflowErrors}">
${fn:toUpperCase(fn:substring(error.field, 0, 1))}${fn:toLowerCase(
fn:substring(error.field, 1,fn:length(error.field)))}:
<b><spring:message message="${error}" /></b>
<br/>
</c:forEach>
</c:if>
<c:forEach var="error" items="${globalErrors}">
<b><spring:message message="${error}" /></b>
<br/>
</c:forEach>
</div>
</div>
</div>
</spring-ext:overflowErrors>