Vaadin:将私有java.util.Calendar项绑定到PopupDateField

Vaadin:将私有java.util.Calendar项绑定到PopupDateField,java,forms,vaadin,Java,Forms,Vaadin,我有一个bean,其字段类型为java.util.Calendar。我正在扩展FormFieldFactory类以适当地呈现其余字段,但我不确定如何使用PopupDateField来呈现字段,以键入java.util.Calendar不久前,我创建了一个为java.sql.Date修改的自定义版本的PopupDateField。我个人会使用java.util.Date,但决定权不在我手中。在我的例子中,最简单的部分是java.sql.Date是java.util.Date的子类,而java.ut

我有一个bean,其字段类型为
java.util.Calendar
。我正在扩展
FormFieldFactory
类以适当地呈现其余字段,但我不确定如何使用PopupDateField来呈现字段,以键入
java.util.Calendar

不久前,我创建了一个为
java.sql.Date
修改的自定义版本的
PopupDateField
。我个人会使用java.util.Date,但决定权不在我手中。在我的例子中,最简单的部分是
java.sql.Date
java.util.Date
的子类,而
java.util.Calendar
不是

我本来打算描述我对PopupDateField派生类所做的修改,但我意识到它可能不起作用,因为日历不是从日期派生的

我从未使用过BeanItems,但您可以尝试创建一个自定义的
属性
,作为
日历
的包装器,或许还可以创建您自己的
VaadinPropertyDescriptor
将该字段绑定到您的自定义属性


这个答案是为了更明确,但我希望它至少有点帮助。如果您有可能影响bean结构,我建议您将日历切换为日期,并仅在需要时使用带有日期的日历。

如果您正在构建web应用程序,您可以向域中添加临时日期属性,在setter&getter上进行日历到日期的转换,以获取或更新原始字段。 希望有帮助

@Transient
private Datetime calendarExAsDate; // corresponds to @Column... private Calendar calendarEx property of the  domain.

 public DateTime getCalendarExAsDate() {
        if (this.getCalendarEx() == null) return null;
        return new DateTime(this.getCalendarEx().getTime());
    }

    public void setCalendarExAsDate(DateTime calendarExAsDate) {
        if (calendarExAsDate== null) return;
        this.calendarExAsDate = calendarExAsDate;
        Calendar cal = Calendar.getInstance();
        cal.setTime(calendarExAsDate.toDate());
        this.setCalendarEx(cal);
    }

为什么字段类型是日历?主要是因为易于使用。我正在使用一个SOAPWeb服务,即将到来的日期是日历格式的。仅供参考:在Vaadin 7中,有一个接口可以解决这个问题()。