我仔细研究了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"));
呈现时,日期字段显示来自 org.apache.wicket.util 的标准
类而不是我的自定义 SimpleDateFormat (02.11.2011 11:59:42)。java.text.DateFormat.SHORT
(02.11.11 11:59) 格式。 convert.converter.DateConverter
我检查过整个过程中都在使用 java.util.Date。 Wicket 版本为 1.4.12。
有什么想法吗?
最佳答案
我认为您的 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
的确切运行时类型并为其覆盖转换器。
关于java - 在 Wicket 中全局注册字段格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064878/