我们有
- 一台服务器 A 在 Jboss EAP6/Windows/US 上运行
- 在 Jboss EAP6/Linux/South America 上运行的另一台服务器 B
当前的spring应用程序,有一个UI页面传递一个日期选择框,当点击提交时,这个日期对象将作为一个java bean的字段传递到下一页。
现在的情况是:
服务器 A 运行此表单没有问题,但服务器 B 在提交时抛出异常:
nested exception is java.lang.IllegalArgumentException:
Unparseable string: [Unparseable date: "Wed May 29 16:34:58 ART 2013",
Unparseable date: "Wed May 29 16:34:58 ART 2013"]]
似乎服务器 B 不知道如何将数据格式处理为Wed May 29 16:34:58 ART 2013
,即使我添加了一个 @initBinder
@InitBinder
public void registerDateBinder(WebDataBinder binder) {
DateFormat printFormat = new SimpleDateFormat(DateTimeFormat.patternForStyle("S-", LocaleContextHolder.getLocale())); // format for joda time dojo UI
printFormat.setLenient(false);
DateFormat sortFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy" , LocaleContextHolder.getLocale()); // format for whatever return from form
sortFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new ExpandableCustomDateEditor(printFormat, Arrays.asList(printFormat, sortFormat), true));
}
ExpandableCustomDateEditor
引用自这篇文章
有趣的部分是当 Date 对象是 bean 的一个字段时会发生上述问题
public String showSecondView(Form aForm,
Model uiModel) {
.....
}
但这在没有@InitBinder 的另一个控制器中没有问题
public String list(Model uiModel,
@RequestParam(value = "fromDate", required = false) Date fromrDate,
.....)
....
}
但是即使使用了@initBinder,为什么还会发生这个错误?我以前发过帖子,似乎平台有不同的timezone
代码翻译方式,但是Spring,我认为它能够支持国际化,对吧?