Как отобразить компонент 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
,
Мои испытания: я пытался использовать стандартный конвертер или пользовательский:
Стандартный:
<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'.)]
Пользовательский:
<f:converter converterId="c2d"/>
- getAsObject - возвращает
java.util.Calendar
объект из представленныхString
, - getAsString - получает
Object
и возвращаетString
отформатирована.
- getAsObject - возвращает
ПРИМЕЧАНИЕ: этот метод был взломан, поэтому вместо ожидания 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}
,