3.5.7. Уведомления
Уведомления представляют собой небольшие окна, всплывающие в центре или в углу главного окна приложения. Они могут исчезать автоматически, или когда пользователь щелкает по экрану или нажимает Esc.
Для того чтобы показать уведомление, необходимо инжектировать в контроллер экрана интерфейс Notifications
и воспользоваться его fluent API. В примере ниже уведомление показывается, когда пользователь щелкает по кнопке:
@Inject
private Notifications notifications;
@Subscribe("sayHelloBtn")
protected void onSayHelloBtnClick(Button.ClickEvent event) {
notifications.create().withCaption("Hello!").show();
}
Уведомление может иметь дополнительное описание, которое показывается под заголовком более мелким шрифтом:
@Inject
private Notifications notifications;
@Subscribe("sayHelloBtn")
protected void onSayHelloBtnClick(Button.ClickEvent event) {
notifications.create().withCaption("Greeting").withDescription("Hello World!").show();
}
Уведомления могут быть следующих типов:
-
TRAY
– уведомление показывается в правом нижнем углу приложения и исчезает автоматически. -
HUMANIZED
– стандартное уведомление в центре экрана, исчезает автоматически. -
WARNING
– предупреждение. Исчезает при щелчке по экрану. -
ERROR
– уведомление об ошибке. Исчезает при щелчке по экрану.
Тип по умолчанию – HUMANIZED
. Другой тип можно указать в параметре метода create()
:
@Inject
private Notifications notifications;
@Subscribe("sayHelloBtn")
protected void onSayHelloBtnClick(Button.ClickEvent event) {
notifications.create(Notifications.NotificationType.TRAY).withCaption("Hello World!").show();
}
В тексте можно использовать символы \n
для перевода строк. Для отображения HTML необходимо указать соответствующий параметр в методе withContentMode()
:
@Inject
private Notifications notifications;
@Subscribe("sayHelloBtn")
protected void onSayHelloBtnClick(Button.ClickEvent event) {
notifications.create()
.withContentMode(ContentMode.HTML)
.withCaption("<i>Hello World!</i>")
.show();
}
При использовании HTML обязательно экранируйте данные, полученные из БД, во избежание инжекции вредоносного кода.
Вы можете передать значение true
в метод withHtmlSanitizer()
, чтобы сделать доступной HTML санитизацию для текстового содержимого уведомления. Также в этом случае параметр ContentMode.HTML
должен быть передан в метод withContentMode()
.
protected static final String UNSAFE_HTML = "<i>Jackdaws </i><u>love</u> <font size=\"javascript:alert(1)\" " +
"color=\"moccasin\">my</font> " +
"<font size=\"7\">big</font> <sup>sphinx</sup> " +
"<font face=\"Verdana\">of</font> <span style=\"background-color: " +
"red;\">quartz</span><svg/onload=alert(\"XSS\")>";
@Inject
private Notifications notifications;
@Subscribe("showNotificationOnBtn")
public void onShowNotificationOnBtnClick(Button.ClickEvent event) {
notifications.create()
.withCaption("Notification with Sanitizer")
.withDescription(UNSAFE_HTML)
.withContentMode(ContentMode.HTML)
.withHtmlSanitizer(true)
.show();
}
@Subscribe("showNotificationOffBtn")
public void onShowNotificationOffBtnClick(Button.ClickEvent event) {
notifications.create()
.withCaption("Notification without Sanitizer")
.withDescription(UNSAFE_HTML)
.withContentMode(ContentMode.HTML)
.withHtmlSanitizer(false)
.show();
}
Значение, переданное в метод withHtmlSanitizer()
, имеет приоритет над значением глобального свойства cuba.web.htmlSanitizerEnabled.
Вы можете установить положение окна уведомления, используя метод withPosition()
. Стандартные значения:
-
TOP_RIGHT
-
TOP_LEFT
-
TOP_CENTER
-
MIDDLE_RIGHT
-
MIDDLE_LEFT
-
MIDDLE_CENTER
-
BOTTOM_RIGHT
-
BOTTOM_LEFT
-
BOTTOM_CENTER
Также вы можете установить задержку в миллисекундах до исчезновения уведомления, используя метод withHideDelayMs()
. Значение -1
используется для того, чтобы потребовать от пользователя щелкнуть сообщение.