有人知道组件<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" />
它格式化了GUI中的值,但在类型为bean.myDate
的属性Calendar
上设置时,我收到以下错误消息:
[5/3/10 12:09:18:398 EEST] 00000021 生命周期我警告:FacesMessage(s) 已经入队,但可能没有 已经显示出来 sourceId = j_id12:j_id189:myDate [severity =(ERROR 2), summary =(/ WEB-INF / xhtml ............ file.xhtml @ 507,51 value =“#{bean.myDate}”:不能 在类'bean'上设置属性'myDate' 重视'5/11/10 3:00 AM'。), 详细=(/ WEB-INF / XHTML ........ file.xhtml @ 507,51 value =“#{bean.myDate}”:不能 在课堂上设置属性'myDate' '... bean ...'重视'5/11/10 3:00 AM”。)]
自定义一个:<f:converter converterId="c2d"/>
java.util.Calendar
返回String
个对象。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.ClassCastException:java.util.GregorianCalendar 与java.util.Date不兼容 at com.icesoft.faces.component.selectinputdate.SelectInputDate.getTextToRender(SelectInputDate.java:252)
任何提示都非常有用! 谢谢, Mihaela
答案 0 :(得分:4)
使用另一个getter / setter返回/获取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 converter不起作用,因为这只会Object
&lt; - &gt; String
转化,而我们需要Object
&lt; - 此处&gt; Date
转换。我不做IceFaces,但特定组件也可能接受某种格式模式的日期字符串。你需要找到它,然后相应地编写covnerter,根据这个字符串格式模式转换Calendar
&lt; - &gt; String
。 java.text.SimpleDateFormat
对此很有帮助。
答案 1 :(得分:3)
要么按照BalusC的建议,要么只设置value="#{yourBean.yourCalendar.time}
。