如何在java.util.Calendar字段上映射IceFaces 组件?

有谁知道组件如何映射到java.util.Calendar字段,而不是java.util.Date

我使用的是IceFaces 1.8.2版,组件 。 该组件需要与java.util.Date proeprty绑定。 例如, value="#{bean.myDate}"myDate字段必须是java.util.Date类型。 但我需要我的日期字段是java.util.Calendar类型。

我的试验:我试过使用标准转换器或自定义转换器:

  1. 标准一: 它格式化GUI中的值,但是当在类型Calendar的属性bean.myDate上设置它时,我收到以下错误消息:

    [5/3/10 12:09:18:398 EEST] 00000021生命周期I警告:FacesMessage已入队,但可能尚未显示。 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’。),detail =(/ WEB-INF / xhtml …….. file.xhtml @ 507,51 value =“#{bean.myDate}”:无法在类’… bean …’上将属性’myDate’设置为值’5/11/10 3:00 AM’ 。)]

  2. 自定义一:

    • getAsObject – 从提交的String返回java.util.Calendar对象。
    • getAsString – 接收一个Object ,并返回格式化的String

注意:此方法被黑客攻击,因此不要期望java.util.CalendargetAsObject方法互补。 相反,被黑客入侵的方法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.Date不兼容的java.util.GregorianCalendar java.lang.ClassCastException: java.util.GregorianCalendar与com.icesoft.faces.component.selectinputdate.SelectInputDate.getTextToRender(SelectInputDate.java:252)中的java.util.Date不兼容

任何提示都非常有用! 谢谢,Mihaela

使用另一个getter / setter返回/获取Date包装Calendar属性。

 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 < - > Stringjava.text.SimpleDateFormat对此很有帮助。

要么像BalusC建议的那样,要么只是设置value="#{yourBean.yourCalendar.time}