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

时间:2012-11-02 22:03:12

标签: java forms vaadin

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

2 个答案:

答案 0 :(得分:1)

不久前,我为PopupDateField创建了java.sql.Date的自定义版本。我个人使用java.util.Date,但决定不在我手中。在我的案例中,简单的部分是java.sql.Datejava.util.Date的子类,而java.util.Calendar则不是。{/ p>

我将描述我对PopupDateField派生类所做的修改,但我意识到它不会起作用,因为Calendar不是从Date派生的。

我从来没有玩过BeanItems,但你可以尝试创建一个自定义Property作为Calendar的包装器,并且perhapse创建你自己的VaadinPropertyDescriptor来将该字段绑定到你的自定义属性。

这个答案意味着更明确,但我希望它至少在某种程度上有所帮助。如果您有可能影响bean结构,我建议您将Calendar切换到Date并仅在需要时使用Calendar和Date。

答案 1 :(得分:1)

如果您要构建一个网络应用程序 - 您可以向域中添加一个临时日期属性,在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);
    }