如何在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
类型。
我的试验:我试过使用标准转换器或自定义转换器:
-
标准一:
它格式化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’ 。)]
-
自定义一:
- getAsObject – 从提交的
String
返回java.util.Calendar
对象。 - 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.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
< - > String
。 java.text.SimpleDateFormat
对此很有帮助。
要么像BalusC建议的那样,要么只是设置value="#{yourBean.yourCalendar.time}
。