【问题标题】:Automatically select Date above 2000 for Datepicker in Vaadin 14Vaadin 14中Datepicker自动选择2000以上的日期
【发布时间】:2022-12-22 01:10:35
【问题描述】:

我想实现一个日期选择器,其中“22”作为年份的键盘条目自动设置为“2022”。所有两位数年份也是如此。我还想支持本地化的日期格式,因为该产品在全球范围内使用。

因此,我可以在其中指定“dd.mm.yy”等格式的 I18nDatepicker 组件无济于事,因为它会拒绝美国标准格式。我想到的是这个小的 ValueChangeListener:

    datePicker.addValueChangeListener(event -> {
        datePicker.setValue(LocalDate.of(
                datePicker.getValue().getYear() % 2000 + 2000,
                datePicker.getValue().getMonth(),
                datePicker.getValue().getDayOfMonth()
    ));

问题是如果日期不同(对于 Vaadin),“setValue”方法将再次触发更改事件。因此,该组件的所有更改侦听器将执行两次,一次是两位数年份,另一次是正确年份。这也可能是数据库查询,这是不好的。

从 Datepicker 扩展的自定义 datepicker 组件不能解决这个问题(据我所知),除非我更改“getValue”方法,这对我来说并不是一个好的解决方案。

我忽略了什么吗?非常感谢其他想法。

谢谢

【问题讨论】:

    标签: vaadin14


    【解决方案1】:

    您需要使用 DatePickerI18n 类设置多种日期格式,例如

    DatePicker picker = null;
    DatePickerI18n i18n = new DatePickerI18n();
    i18n.setDateFormats("MM/DD/yyyy", "MM/DD/yy);
    i18n.set... // Populate the whole i18n object using all the setters
    picker.setI18n(i18n);
    

    【讨论】:

    • 首先感谢您的评论。问题在于德国人将日放在第一位,即 dd/mm,而美国人将月份放在第一位 mm/dd。有没有一种方法可以根据语言环境或 smth 决定使用哪种格式?
    • 是的,您可以使用适合您的格式,我只是介绍 API 的设置方式。
    • 问题是我认为 API 不支持适合我的格式。我的格式是日期和月份的任意数字 (1-2),后跟年份的 2-4 位数字,这些数字始终设置为 2000 年之后。但我需要根据用户的本地设置调整日期和月份的顺序。 Vaadin 对 4 位数年份的本地支持做得很好,但我还没有找到为每个本地制作自定义格式的方法。
    猜你喜欢
    • 2020-09-13
    • 2013-11-08
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    相关资源
    最近更新 更多