gpt4 book ai didi

java - 如何映射 IceFaces component on a java. util.Calendar 字段?

转载 作者:行者123 更新时间:2023-12-02 17:59:55 24 4
gpt4 key购买 nike

有谁知道如何组件 <ice:selectInputDate>被映射到 java.util.Calendar字段,而不是java.util.Date

我正在使用IceFaces版本 1.8.2,组件 <ice:selectInputDate> 。该组件需要与 java.util.Date 绑定(bind)属性(property)。例如,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] 00000021lifecycle I WARNING: FacesMessage(s)have been enqueued, but may not havebeen displayed.sourceId=j_id12:j_id189:myDate[severity=(ERROR 2),summary=(/WEB-INF/xhtml............file.xhtml @507,51 value="#{bean.myDate}": Can'tset property 'myDate' on class 'bean'to value '5/11/10 3:00 AM'.),detail=(/WEB-INF/xhtml........file.xhtml@507,51 value="#{bean.myDate}": Can'tset property 'myDate' on class'...bean...' to value '5/11/10 3:00AM'.)]

  • 自定义一个:<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 EEST] 0000001fD2DFaceletVie Ecom.icesoft.faces.facelets.D2DFaceletViewHandlerrenderResponse Problem inrenderResponse:java.util.GregorianCalendarincompatible with java.util.Datejava.lang.ClassCastException: java.util.GregorianCalendarincompatible with java.util.Dateat com.icesoft.faces.component.selectinputdate.SelectInputDate.getTextToRender(SelectInputDate.java:252)

    最佳答案

    用另一个返回/获取日期的getter/setter来包装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 converter不起作用,因为这只能进行 Object<-->String 转换,而我们需要一个 Object<-->日期在这里转换。我不做 IceFaces,但特定组件也有可能接受某种格式模式的日期字符串。您需要找出这一点,然后相应地编写 covnerter 以根据此字符串格式模式转换 Calendar<-->Stringjava.text.SimpleDateFormat对此很有帮助。

    关于java - 如何映射 IceFaces <ice :selectInputDate> component on a java. util.Calendar 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2766287/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com