更改 Vaadin DateField 或 InlineDateField 的第一天

问题描述 投票:0回答:4

Screen-shot of Vaadin InlineDateField widget

如何在 Vaadin 日历小部件、DateFieldInlineDateField更改一周的第一天?例如,在上面的屏幕截图中,一周从星期日开始,但我想要星期一。

我知道这些小部件尊重区域设置,并进行相应调整。例如,指定 Locale.FRANCE 会将星期一作为一周的第一天(以及法语表示月份和日期的名称),而指定 Locale.CANADA_FRENCH 会将星期日作为一周的第一天。

但是有什么方法可以专门设置一周的第一天吗?就我而言,我希望用户选择一个区域设置,但日历特别必须将星期一作为一周的第一天,以呈现标准 ISO 8601 周

java vaadin vaadin7 datefield
4个回答
2
投票

您可以操作 UI 的区域设置数据的缓存。例如:

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

请注意,列表

localeData
将随着新的语言环境而变化,您可以在运行时让 vaadin 意识到。您可能需要确保事先用您已知的内容填写此列表,或者找到对变化做出反应的方法。


1
投票

如果您的 UI 区域设置必须是其中一种,但您希望日期字段中的日期表示为另一种,则可以使用 dateField.setLocale(Locale.FRANCE); 专门覆盖日期字段中的区域设置。据我所知,没有专门设置第一天的选项。


0
投票

解决方法:分配具有相同语言的另一个区域设置

正如 Jens Jansson 的答案中提到的,我们可以设置特定小部件的区域设置来覆盖使用 UI 区域设置的默认设置。

我已使用该功能作为黑客,解决一周第一天的问题。

假设您通常希望使用

Locale.CANADA
作为应用程序的区域设置。但是该区域设置使用星期日作为一周的第一天,而我们想要星期一。也许我们想要 InlineDateField 中的星期特征。我们可以为该 InlineDateField 分配另一个使用星期一的英语区域设置,例如
Locale.UK
,其中星期一是一周的第一天。对于法式风格,如果我们通常使用
Locale.CANADA_FRENCH
,我们可以将
Locale.FRANCE
分配给小部件,其中星期一而不是星期日首先出现。

不理想,但我已经成功地使用了这种方法。


0
投票

在 Vaadin23 有一个官方方法..

DatePicker startDatePicker = new DatePicker();
startDatePicker.setI18n(new DatePicker.DatePickerI18n().setFirstDayOfWeek(1));
© www.soinside.com 2019 - 2024. All rights reserved.