2012-11-09 36 views
3

在我的表單支持對象被驗證後,我有一個BindingResult,它包含一個FieldError列表。每個FieldError都有一個defaultMessage。這個消息是如何設置的,爲什麼它不使用我的Spring MessageSource?我希望從我的Spring的MessageSource派生默認消息。使用Spring的MessageSource設置FieldError默認消息

編輯: 我看到錯誤代碼正在FieldError對象中正確設置。這只是該對象中的默認消息不是來自我的MessageSource。例如,當我輸入一個字符串的一個領域,是一個int我希望它從messages.properties收到我的留言:

typeMismatch=Invalid type was entered. 

我能得到這一信息的唯一途徑是,如果我把我的FieldError對象,手動將其傳遞到的MessageSource像這樣:

messageSource.getMessage(fieldError, null); // This gets my message from messages.properties. 
+0

你解決了這個問題嗎? – MyTitle

+0

對不起,我不記得我們在那個項目上做了什麼。不幸的是,我不再有權訪問該項目的源代碼。 – Jeremy

回答

3

如果您使用的是Validator,您可以在驗證實現類指定的MessageSource的消息密鑰,通常使用的方法ValidationUtils相關。 Section 6.2 of the Spring documentation就有一個很好的例子。

如果您使用JSR-303 Bean Validation之類的Validator之外的其他工具,Spring也將嘗試按照約定嘗試resolve error codes

假設您有一個名爲'Address'的表單支持對象,其中包含一個名爲'zipcode'的int字段。如果用戶爲zipcode字段輸入字符串,默認情況下,Spring將使用DefaultMessageCodesResolver並在MessageSource中查找名爲「typeMismatch.address.zipcode」的鍵。如果沒有找到該鍵,它會嘗試'typeMismatch.zipcode',然後'typeMismatch.int',然後'typeMismatch'。

或者,您可以實施您自己的MessageCodesResolver

+0

我可以看到在FieldError對象中設置了正確的錯誤代碼。這只是該對象中的默認消息不是來自我的MessageSource。我必須調用messageSource.getMessage(fieldError,null)來獲取我的消息。我希望FieldError對象中的默認消息自動來自我的MessageSource。 – Jeremy

+1

你可以添加一些更具體的代碼示例引用對象屬性,你看到的問題?也許是bean註釋,消息密鑰等? – dvause

相關問題