3.5.5. Диалоговые окна
Интерфейс Dialogs
предназначен для отображения стандартных диалоговых окон. Его методы createMessageDialog()
и createOptionDialog()
являются точками входа в fluent API, позволяющий конструировать и отображать диалоги.
В примере ниже диалог отображает сообщение при нажатии кнопки:
@Inject
private Dialogs dialogs;
@Subscribe("showDialogBtn")
protected void onShowDialogBtnClick(Button.ClickEvent event) {
dialogs.createMessageDialog().withCaption("Information").withMessage("Message").show();
}
В тексте можно использовать символы \n
для перевода строк. Для отображения HTML необходимо передать ContentMode.HTML
в метод withContentMode()
. При использовании HTML обязательно экранируйте данные, полученные из БД, во избежание инжекции вредоносного кода.
Следующие методы позволяют изменить параметры отображения и поведения диалога:
-
withModal()
- если переданоfalse
, диалог отображается как немодальный, что позволяет пользователю взаимодействовать с другими частями приложения. -
withCloseOnClickOutside()
- если переданоtrue
и диалог модальный, то пользователь может закрыть диалог щелкнув на любой части окна приложения вне диалога. -
withWidth()
,withHeight()
позволяют указать желаемую геометрию диалога.
Например:
@Inject
private Dialogs dialogs;
@Subscribe("showDialogBtn")
protected void onShowDialogBtnClick(Button.ClickEvent event) {
dialogs.createMessageDialog()
.withCaption("Information")
.withMessage("<i>Message<i/>")
.withContentMode(ContentMode.HTML)
.withCloseOnClickOutside(true)
.withWidth("100px")
.withHeight("300px")
.show();
}
Диалог выбора отображает некоторое сообщение и набор кнопок для выбора пользователем. При конструировании данного диалога необходимо передать в метод withActions()
массив действий, для каждого из которых в диалоге создается кнопка. Например:
@Inject
private Dialogs dialogs;
@Subscribe("showDialogBtn")
protected void onShowDialogBtnClick(Button.ClickEvent event) {
dialogs.createOptionDialog()
.withCaption("Confirm")
.withMessage("Are you sure?")
.withActions(
new DialogAction(DialogAction.Type.YES, Action.Status.PRIMARY).withHandler(e -> {
doSomething();
}),
new DialogAction(DialogAction.Type.NO)
)
.show();
}
При нажатии на кнопку диалог закрывается и вызывается метод actionPerform()
соответствующего действия.
В качестве кнопок со стандартными названиями и значками удобно использовать анонимные классы, унаследованные от DialogAction
. Поддерживаются пять видов действий, определяемых перечислением DialogAction.Type
: OK
, CANCEL
, YES
, NO
, CLOSE
. Названия соответствующих кнопок извлекаются из главного пакета локализованных сообщений.
Второй параметр конструктора DialogAction
используется для задания визуального стиля кнопки, к которой привязано данное действие. Статус Status.PRIMARY
подсвечивает кнопку и задаёт ей выделение по умолчанию, что обеспечивается стилем c-primary-action
. Если для диалога задано несколько действий с Status.PRIMARY
, то фокус и стиль получает только кнопка первого такого действия в списке.