Как отобразить компонент IceFaces <ice: selectInputDate> в поле java.util.Calendar?

Кто-нибудь знает, как может компонент <ice:selectInputDate> картироваться на java.util.Calendar поле, а не java.util.Date?

Я использую из IceFaces версии 1.8.2, компонент <ice:selectInputDate>, Этот компонент должен быть связан с java.util.Date proeprty. Например, value="#{bean.myDate}", myDate поле должно быть типа java.util.Date, Но мне нужно, чтобы мое поле даты было типа java.util.Calendar,

Мои испытания: я пытался использовать стандартный конвертер или пользовательский:

  1. Стандартный: <f:convertDateTime pattern="dd/MM/yyyy" /> он форматирует правильное значение в графическом интерфейсе, но при установке его в свойстве bean.myDate типа Calendar Я получаю следующее сообщение об ошибке:

    [5/3/10 12: 09: 18: 398 EEST] 00000021 жизненный цикл I ПРЕДУПРЕЖДЕНИЕ: FacesMessage(s) было помещено в очередь, но, возможно, не отображалось. sourceId=j_id12:j_id189:myDate[серьезность =(ОШИБКА 2), сводка =(/WEB-INF/xhtml............file.xhtml @507,51 value="#{bean.myDate}": Невозможно установить для свойства 'myDate' класса 'bean' значение 5/11/10 3:00 AM.), detail=(/WEB-INF/xhtml........file.xhtml @507,51 value="#{bean.myDate}": невозможно установить для свойства 'myDate' класса '...bean...' значение '5/11/10 3:00 AM'.)]

  2. Пользовательский: <f:converter converterId="c2d"/>

    • getAsObject - возвращает java.util.Calendar объект из представленных String,
    • getAsString - получает Objectи возвращает String отформатирована.

ПРИМЕЧАНИЕ: этот метод был взломан, поэтому вместо ожидания java.util.Calendar, чтобы дополнять getAsObject метод. Взломанный метод getAsString, ожидает java.util.Dateпредоставляется в качестве параметра (по ice:selectInputDate) и возвращает String отформатирована.

Но все равно появляется сообщение об ошибке:

[5/3/10 12: 55: 34: 299 EEST] 0000001f D2DFaceletVie E com.icesoft.faces.facelets.D2DFaceletViewHandler renderResponse Проблема в renderResponse: java.util.GregorianCalendar несовместима с java.util.Date java.lang.ClassCException java.util.GregorianCalendar несовместим с java.util.Date на com.icesoft.faces.component.selectinputdate.SelectInputDate.getTextToRender(SelectInputDate.java:252)

Любой намек очень полезен! Спасибо михаэла

2 ответа

Обернуть Calendar свойство с другим получателем / установщиком, возвращающим / принимающим Date,

private Calendar calendar;

public Date getCalendarDate() {
    return (calendar != null) ? calendar.getTime() : null;
}

public void setCalendarDate(Date date) {
    if (calendar == null) {
        calendar = Calendar.getInstance();
        calendar.clear(); // Avoid timezone issues.
    }
    calendar.setTime(date);
}

Конвертер JSF не будет работать, потому что это только делает Object <-> String конверсии, а нам нужен Object <-> Date преобразование здесь. Я не делаю IceFaces, но может быть шанс, что конкретный компонент также принимает строку даты в определенном шаблоне формата. Вам нужно будет это выяснить, а затем написать covnerter соответственно для преобразования Calendar <-> String в соответствии с этим шаблоном формата строки. java.text.SimpleDateFormat полезно в этом.

Либо делайте так, как предлагает BalusC, либо просто установите value="#{yourBean.yourCalendar.time},

Другие вопросы по тегам