我有一個春天啓動的Web應用程序,我在控制器拒絕值是這樣的:格式春天錯誤消息參數
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String createSubmit(@ModelAttribute("createForm") CreateForm createForm, BindingResult result, SessionStatus status) {
DateTime dt1 = createForm.getDt1();
DateTime dt2 = createForm.getDt2();
if (!dt1.isBefore(dt2)){
result.rejectValue("fieldId", "validation.isbefore", new Object[]{dt1, dt2}, "first date must be before second");
}
}
所以,如果日期dt1
不dt2
之前,該值將被拒絕。現在,我有這個入口非常標準的ResourceBundleMessageSource
在messages_en.properties
:
validation.isbefore = Start date {0} must be before end date {1}
當驗證錯誤發生,雖然,我得到一個消息Start date 3/21/16 5:01 PM must be before end date 3/20/16 5:01 PM
(包括dt1
和dt2
使用他們toString()
格式化消息)。
現在,java.text.MessageFormat
確實支持某些格式,即{0,date,short}
。但是,只適用於java.util.Date
,而不是喬達時間(或任何其他自定義類)。
有沒有辦法自定義錯誤消息參數如何格式化?我不想在驗證時進行驗證(在最終代碼中,驗證器本身與控制器分離,沒有關於所選語言的信息,因此它不知道使用何種日期格式)。
真的,你不應該處理在服務器上呈現邏輯。 –
@EngineerDollery那麼服務器負責生成HTML(它是Spring MVC/Thymeleaf),所以我必須處理服務器上的表示/本地化。 –
HTML是用於結構,css(有時是javascript)負責演示。 Java負責驗證,業務規則和CRUD。你需要javascript來設置它的格式,但如果你把日期包裹在一個容易識別的div中,應該很容易。然後,gui人可以處理L&F問題,讓您繼續編寫服務器代碼。 :) –