如何在CustomEditor
的{{1}}中提供多种日期格式?
这是我在控制器内部的活页夹。
InitBinder
现在我也想要格式@InitBinder
public void binder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("dd-MM-yyyy"), true));
}
的日期,即两种格式都需要。怎么做到这一点?
答案 0 :(得分:7)
根据Spring documentation of DataBinder#registerCustomEditor,支持每个属性路径只有一个注册的自定义编辑器。
这意味着(您可能已经知道),您无法将两个自定义编辑器绑定到同一个类。简单来说,你不能拥有:
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("dd-MM-yyyy"), true));
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("dd/mm/yyyy"), true));
但是,您可以根据自己的两个DateFormat
注册自己的SimpleDateFormat
实施方案。
例如,考虑一下这个自定义DateFormat
(下方),它可以在<{1}}或Date
中解析 "dd-MM-yyyy"
格式:
"mm/dd/yyyy"
然后,您只需将public class MyDateFormat extends DateFormat {
private static final List<? extends DateFormat> DATE_FORMATS = Arrays.asList(
new SimpleDateFormat("dd-MM-yyyy"),
new SimpleDateFormat("mm/dd/yyyy"));
@Override
public StringBuffer format(final Date date, final StringBuffer toAppendTo, final FieldPosition fieldPosition) {
throw new UnsupportedOperationException("This custom date formatter can only be used to *parse* Dates.");
}
@Override
public Date parse(final String source, final ParsePosition pos) {
Date res = null;
for (final DateFormat dateFormat : DATE_FORMATS) {
if ((res = dateFormat.parse(source, pos)) != null) {
return res;
}
}
return null;
}
}
绑定到Date.class
实例上构建的CustomDateEditor
,如下所示:
MyDateFormat