Wiquery DatePicker отображает время, проверка не проходит - PullRequest
3 голосов
/ 04 ноября 2011

У меня проблемы с датчиком Wiquery DatePicker в следующем коде на странице Wicket (при использовании CompundPropertyModel свойство date имеет тип java.util.Date):

DatePicker<Date> datePicker = new DatePicker<Date>("date"){
    @Override
    public boolean isVisible() {
        return selectedType.hasDate();
    }
};
datePicker.setDateFormat(DateUtil.DATE_PATTERN); // pattern is "dd.MM.yyyy"
form.add(datePicker);

HTML-код thisограничен:

<input wicket:id="date" id="date"/>

Проблема заключается в том, что при редактировании существующих данных в поле ввода отображается время вместе с датой, а при отправке формы проверка завершается неудачно, поскольку она не соответствует шаблону.

Как заставить DatePicker правильно отображать текущее значение?

Ответы [ 3 ]

1 голос
/ 04 ноября 2011

Будучи компонентом DatePicker a TextField, почему бы не использовать в нем пользовательский IConverter для возврата только dd.MM.yyyy в его convertToObject?

Мне не удалось просмотреть его источники ни одного зарегистрированного IConverter или другого способа преобразования ввода, так что это, вероятно, будет конфликтовать с форматированием ввода в этом компоненте.

UPDATE

После отладки в быстром запуске с использованием WiQuery 1.2.4 и Wicket 1.4.17, он показывает, что начальное значение DatePicker (то есть TextField) является стандартным преобразованием, выполняемым Component.getDefaultModelObjectAsString().

Поскольку TextField имеет IModel<Date>, он будет использовать все, что IConverter зарегистрировано для класса Date. В вашем случае это может быть пользовательский IConverter, который форматируется со временем. Я бы попробовал переопределить DatePicker getConverter() и использовать SimpleDateFormat, который учитывает формат, указанный в setDateFormat().

Эта проблема дает подсказку о том, что следует указать IConverter вместе с DatePicker: Проблема 168: Неверный (или необычный) формат даты для NL в DatePicker

Вы также можете найти это обсуждение в списке пользователей Wicket полезным: DatePicker для выбора года . Жюльен Рош (один из владельцев проекта) утверждает, что setDateFormat работает только на стороне клиента с JQuery:

Я думаю, вам нужно установить правильный конвертер в текстовом поле калитки (с помощью переопределение метода getConverter и с классом PatternDateConvert). Опция dateFormat работает только на стороне клиента с помощью jQuery.

1 голос
/ 04 ноября 2011

Это, похоже, ошибка в относительно неясном компоненте Wiquery DatePicker.Я переключился на org.apache.wicket.extensions.yui.calendar.DatePicker, у которого нет этой проблемы.

0 голосов
/ 10 ноября 2011

сначала взгляните на https://cwiki.apache.org/WICKET/using-custom-converters.html

тогда вы знаете, что калитка конвертирует ваш объект в текст от этого механика, так что ... все, что вам нужно сделать

Переопределите метод newConverterLocator () в классе Application для предоставления настраиваемого ConverterLocator.

protected IConverterLocator newConverterLocator() {
    ConverterLocator converterLocator = new ConverterLocator();
    converterLocator.set(Date.class, new DateConverter());
    return converterLocator;
}

совет: будьте осторожны с java.sql. Конвертер классов даты

...