有谁知道如何组件<ice:selectInputDate>
被映射到java.util.Calendar
场,不java.util.Date
?
我正在使用来自IceFaces版本 1.8.2,组件<ice:selectInputDate>
。该组件需要绑定java.util.Date
财产。例如,value="#{bean.myDate}"
, the myDate
字段必须是类型java.util.Date
。但我需要我的日期字段是类型java.util.Calendar
.
我尝试过使用标准转换器或自定义转换器:
- 标准一:
<f:convertDateTime pattern="dd/MM/yyyy" />
它在 GUI 中格式化正确的值,但是在属性上设置它时bean.myDate
类型的Calendar
我收到以下错误消息:
[5/3/10 12:09:18:398 东部夏令时间] 00000021
生命周期 I 警告:FacesMessage(s)
已入队,但可能还没有
已显示。
sourceId=j_id12:j_id189:myDate[严重性=(错误 2),
摘要=(/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
是'。)]
- 定制一:
<f:converter converterId="c2d"/>
- getAsObject - 返回
java.util.Calendar
已提交对象之外的对象String
.
- getAsString - 接收一个
Object
,并返回String
格式化。
注意:这个方法被黑客攻击了,所以不要期待java.util.Calendar
, 与getAsObject
方法。相反,黑客方法getAsString
,期望java.util.Date
,作为参数提供(通过ice:selectInputDate
)并返回String
格式化。
但仍然出现错误信息:
[5/3/10 12:55:34:299 东部标准时间] 0000001f
D2DFaceletVie E
com.icesoft.faces.facelets.D2DFaceletViewHandler
renderResponse 中的问题
渲染响应:
java.util.GregorianCalendar
与 java.util.Date 不兼容
java.lang.ClassCastException:java.util.GregorianCalendar
与 java.util.Date 不兼容
在 com.icesoft.faces.component.selectinputdate.SelectInputDate.getTextToRender(SelectInputDate.java:252)
包裹住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);
}
A JSF转换器不会起作用,因为这只会起作用Object
String
转换,而我们需要一个Object
Date
在这里转换。我不做 IceFaces,但特定组件可能有机会接受日期字符串certain格式模式也是如此。您需要找出这一点,然后相应地编写转换器来进行转换Calendar
String
根据这个字符串格式模式。这java.text.SimpleDateFormat对此很有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)