Английские названия месяцев в datefield resolution="MONTH" dateFormat="LLL yyyy"

Добрый день.
при заведении в форме

получаю поле, в котором отображаются английские названия месяцев при выборе.
При этом, при активации поля, для выбора предоставляются русские названия
Локаль в приложении стоит русскаяimage

Версия 7.2.13

Добрый день!

К сожалению DateField из-за особенностей работы маски, не работает с форматами, которые содержат буквенные записи. В данном случае, отображаются английские символы, потому что Vaadin не пытается локализовать название месяца (поддерживает только M символ) и форматирует дату без использования локализации, а маска воспринимает LLL как символы нижнего регистра. К примеру, LLLL уже отобразилось бы не корректно.

Спасибо за ответ.
Можете предложить альтернативное решение для этого случая?
Формат 08.2021 не устраивает

Можно использовать DatePicker с resolution="MONTH" вместо DateField. Пример можно посмотреть в онлайн демо: DatePicker with custom resolution.

Второй вариант можно отображать дату в TextField, но он немного посложнее. Например, можно положить рядом TextField и PopupButton. Кнопка будет показывать DatePicker, изменения которого будут устанавливаться в TextField. Простой пример:

<hbox spacing="true">
    <textField id="textField"/>
    <popupButton icon="CALENDAR">
        <popup>
            <datePicker id="datePicker"
                        dataContainer="orderDc"
                        property="date"
                        resolution="MONTH"/>
        </popup>
    </popupButton>
</hbox>
@Inject
private TextField<String> textField;
@Inject
private UserSession userSession;

@Subscribe
public void onInit(InitEvent event) {
    format = new SimpleDateFormat("LLL yyyy", userSession.getLocale());
}

@Subscribe("datePicker")
public void onDatePickerValueChange(HasValue.ValueChangeEvent<Date> event) {
    Date date = event.getValue();
    if (date == null) {
        textField.setValue(null);
    } else {
        textField.setValue(format.format(date));
    }
}

image

Если доработать, то можно будет вынести в отдельный компонент на базе CompositeComponent (см. документацию). Также можно написать стили, чтобы компонент выглядел как DateField.

1 симпатия

Роман, большое спасибо.
Пошли по второму пути - все работает отлично.
Единственный нюанс - не скрывается попап при клике по месяцу.
Пробовал calendarPopup.setPopupVisible(false) при onDatePickerValueChange - то тогда он скрывается при изменеии по стрелкам перехода между месяцами.