java 更改Vaadin DateField或InlineDateField的第一天

tjvv9vkg  于 5个月前  发布在  Java
关注(0)|答案(4)|浏览(37)


的数据
如何在Vaadin日历小部件DateFieldInlineDateField更改一周的第一天?例如,在上面的屏幕截图中,一周从周日开始,但我想要周一。
我知道这些小部件尊重Locale,并相应地进行调整。例如,分配Locale.FRANCE会将星期一作为一周的第一天(并将法语用于月份和日期的名称),而Locale.CANADA_FRENCH会将星期日作为一周的第一天。
但是有没有什么方法可以专门设置星期一呢?在我的例子中,我希望用户选择一个Locale,但是日历必须将星期一作为星期一才能显示标准的ISO 8601 weeks

ua4mk5z4

ua4mk5z41#

你可以操作UI的locale数据的该高速缓存。例如:

class AppUI extends UI {
    @Override
    protected void init(VaadinRequest vaadinRequest) {
        state.localeServiceState.localeData*.firstDayOfWeek = 1
    }
}

字符串
注意,列表localeData将随着新的区域而改变,你让vaadin在运行时知道.你可能想确保用你已知的区域预先填充这个列表或者找到对改变做出React的方法.

piztneat

piztneat2#

如果你的UI语言环境必须是一个,但你希望日期字段中的日期表示是另一个,你可以在日期字段中使用dateField.setLocale(Locale.FRANCE);覆盖语言环境。据我所知,没有专门设置第一天的选项。

uidvcgyl

uidvcgyl3#

解决方法:指定另一个语言相同的Locale

正如在answer by Jens Jansson中提到的,我们可以设置特定小部件的区域设置来覆盖使用UI的区域设置的默认值。
我把这个功能当作一种技巧,一种解决这个问题的方法。
假设您希望使用Locale.CANADA作为应用的区域设置。但该区域设置使用星期日作为一周的第一天,而我们希望使用星期一。也许我们希望在InlineDateField中使用一年中的星期功能。我们可以为该InlineDateField分配另一个使用星期一的英语区域设置,例如Locale.UK,其中星期一是一周的第一天。对于法语版本,如果我们通常使用Locale.CANADA_FRENCH,我们可以将Locale.FRANCE分配给小部件,其中星期一而不是星期天首先出现。
不太理想,但我一直在成功地使用这种方法。

rwqw0loc

rwqw0loc4#

在Vaadin23有一个官方的方式..

DatePicker startDatePicker = new DatePicker();
startDatePicker.setI18n(new DatePicker.DatePickerI18n().setFirstDayOfWeek(1));

字符串

相关问题