Добрый день.
при заведении в форме
получаю поле, в котором отображаются английские названия месяцев при выборе.
При этом, при активации поля, для выбора предоставляются русские названия
Локаль в приложении стоит русская
Версия 7.2.13
Добрый день.
при заведении в форме
получаю поле, в котором отображаются английские названия месяцев при выборе.
При этом, при активации поля, для выбора предоставляются русские названия
Локаль в приложении стоит русская
Версия 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));
}
}
Если доработать, то можно будет вынести в отдельный компонент на базе CompositeComponent
(см. документацию). Также можно написать стили, чтобы компонент выглядел как DateField.
Роман, большое спасибо.
Пошли по второму пути - все работает отлично.
Единственный нюанс - не скрывается попап при клике по месяцу.
Пробовал calendarPopup.setPopupVisible(false) при onDatePickerValueChange - то тогда он скрывается при изменеии по стрелкам перехода между месяцами.