2014-07-22 58 views
0

我已經檢查了BindingResultFieldError Javadocs(和源代碼),並且無法找到此問題的明確答案。當下面的代碼在Spring MVC Controller方法中執行時(在POST上),當表單重新顯示時,驗證失敗的字段顯示爲空白。這是行爲的目的?我可以依靠它在所有情況下(即驗證失敗的字段都返回空白?)Spring BindingResult或FormError會清除一個有錯誤的字段嗎?

// Does the user's email address already exist? 
    if (theUser != null) { 
     result.addError(new FieldError("theForm", "emailAddress", null, false, new String[] { "theAccount.emailAddress.alreadyInUse" }, null, null)); 
     return ".createAccount"; 
    } 

回答

0

再次檢查FieldError構造,根據JavaDoc中,第三個參數被拒絕字段值:

rejectedValue - the rejected field value 

的它覆蓋值的代碼的確切部分是AbstractBindingResult類:

public Object getFieldValue(String field) { 
    FieldError fieldError = getFieldError(field); 
    // Use rejected value in case of error, current bean property value else. 
    Object value = (fieldError != null ? fieldError.getRejectedValue() : 
      getActualFieldValue(fixedField(field))); 
    // Apply formatting, but not on binding failures like type mismatches. 
    if (fieldError == null || !fieldError.isBindingFailure()) { 
     value = formatFieldValue(field, value); 
    } 
    return value; 
} 

所以,當你提供FieldError類空rejectedValue,表單字段被清除。作爲或我,我一直使用rejectValue而不是addError

result.rejectValue("field", "errorCode"); 
+0

D'Oh!我的愚蠢。感謝您指出了這一點。 – user3120173

相關問題