Wicket中的字段格式的全局注册

时间:2011-11-09 12:14:37

标签: java wicket date-format

我仔细研究了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。

有什么想法吗?

1 个答案:

答案 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和覆盖转换器的确切运行时类型。