我仔细研究了Jonik's entry关于在Wicket中自定义BigDecimal格式的问题。感谢这段优秀的代码。不幸的是,我不能让它为我的用例工作。
我想全局注册日期格式,并在Application子类中使用以下代码:
@Override
protected IConverterLocator newConverterLocator() {
ConverterLocator converterLocator = new ConverterLocator();
converterLocator.set(Date.class, new DateConverter() {
@Override
public DateFormat getDateFormat(Locale ignore) {
return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
}
});
return converterLocator;
}
然后在网页中使用日期字段时,代码如下:
form.add(new TextField<Date>("dateField"));
渲染时,日期字段显示来自java.text.DateFormat.SHORT
类的标准org.apache.wicket.util.convert.converter.DateConverter
(02.11.11 11:59)格式,而不是我的自定义SimpleDateFormat(02.11.2011 11:59:42) )。
我已经检查过整个java.util.Date的使用情况。 Wicket版本是1.4.12。
有什么想法吗?
答案 0 :(得分:5)
我认为您的dateField
类型为java.util.Date
,但实际对象(从数据库加载?)是例如java.sql.Timestamp
或其他java.util.Date
的孩子。这就是ConverterLocator
选择其他转换器而不是你的转换器的原因。 ConverterLocator
的源代码包含以下内容:
set(Date.class, new DateConverter());
set(Calendar.class, new CalendarConverter());
set(java.sql.Date.class, new SqlDateConverter());
set(java.sql.Time.class, new SqlTimeConverter());
set(java.sql.Timestamp.class, new SqlTimestampConverter());
因此,您需要知道dateField
和覆盖转换器的确切运行时类型。