有谁知道如何将组件<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生命周期I警告: FacesMessage(s)已排队,但可能没有显示。SourceId=j_id12:j_id189:myDateseverity=(错误2),summary=(/WEB/xhtml.file.xhtml @507,51 value="#{bean.myDate}":无法将类'bean‘上的属性'myDate’设置为'5/11/10 3:00 AM.‘),detail=(/WEB/xhtml.file.xhtml @507,51 value=@#{bean.myDate}):无法在类’...bean‘上设置属性'myDate’.值“5/11/10 3:00 AM”)
<f:converter converterId="c2d"/>String中返回java.util.Calendar对象。Object,并返回格式化的String。注意:这个方法被黑了,而不是期望java.util.Calendar与getAsObject方法互补。相反,被黑客攻击的方法getAsString需要一个java.util.Date作为参数(由ice:selectInputDate提供)并返回格式化的String。
但是仍然会出现一条错误消息:
5/3/10 12:55:34:299 EEST 0000001f com.icesoft.faces.facelets.D2DFaceletViewHandler renderResponse renderResponse: java.util.GregorianCalendar不兼容java.util.Date java.lang.ClassCastException: java.util.GregorianCalendar与java.util.Date不兼容
发布于 2010-05-04 15:48:19
用返回/接受Calendar的另一个getter/setter包装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在这方面很有帮助。
发布于 2010-05-05 16:21:30
要么按BalusC的建议做,要么简单地设置value="#{yourBean.yourCalendar.time}。
https://stackoverflow.com/questions/2766287
复制相似问题