如何在java.util.Calendar字段上映射IceFaces <ice:selectinputdate>组件?</ice:selectinputdate>

时间:2010-05-04 14:45:00

标签: java jsf seam icefaces selectinputdate

有人知道组件<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类型。

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

  1. 标准一:<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”。)]

  2. 自定义一个:<f:converter converterId="c2d"/>

    • getAsObject - 从提交的java.util.Calendar返回String个对象。
    • getAsString - 收到Object,并返回格式为String的内容。
  3. 注意:此方法已被黑客攻击,因此不是期望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

2 个答案:

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

答案 1 :(得分:3)

要么按照BalusC的建议,要么只设置value="#{yourBean.yourCalendar.time}