我有一个春天启动的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问题,让您继续编写服务器代码。 :) –