Глобальная регистрация полевых форматов в Wicket - PullRequest
6 голосов
/ 09 ноября 2011

Я внимательно изучил запись Джоника о настройке форматирования BigDecimal в Wicket. Спасибо за этот отличный кусок кода. К сожалению, я не могу заставить его работать в моем случае использования.

Я хочу зарегистрировать форматирование даты глобально и использую следующий код в подклассе приложения:

@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 (02.11.11 11:59), исходящее из класса org.apache.wicket.util.convert.converter.DateConverter вместо моего пользовательского SimpleDateFormat (02.11.2011 11:59:42).

Я проверил, что java.util.Date используется повсеместно. Версия калитки 1.4.12.

Есть идеи?

1 Ответ

5 голосов
/ 09 ноября 2011

Я думаю, что ваш 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 и переопределить конвертер для него.

...