Skip to main content

События

В N2O есть возможность выполнять действия не только по активному событию вроде нажатия кнопки, но и по событию, которое может прийти по сети.

События приложения

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

События приложения задаются элементом <events> в *.application.xml файле.

События приложения
<application>
<events>
...
<events>
</application>

События на странице

События можно задать на определенных страницах. В этом случае они будут срабатывать только когда пользователь находится на такой странице.

События страницы задаются элементом <events> в *.page.xml файле.

События страницы
<page>
<events>
...
<events>
</page>

Событие изменения данных

С помощью события изменения данных можно вызвать какие-либо действия при изменении определенных данных.

Событие изменения данных задаются с помощью элемента <on-change>.

События изменения данных
<events>
<on-change datasource="ds" model="resolve">
... <!-- Действия -->
</on-change>
</events>
warning

Событие изменения данных можно объявлять только на страницах.

Stomp событие

Stomp событие - это событие, которое может быть получено по STOMP протоколу.

Обработка события

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

Получение события и отображение уведомления на странице
<application xmlns="http://n2oapp.net/framework/config/schema/application-3.0">
<events>
<!-- клиент будет прослушивать данные, полученные по указанному destination -->
<stomp-event id="notif" destination="/notifications">
<!-- действие отображения уведомления -->
<alert title="Привет, Мир!" text="Текст сообщения" placement="top-right" color="success" timeout="3000"/>
</stomp-event>
</events>

...
</application>

Но механизм событий способен и на гораздо большее. Например, отображаемое уведомление будет задаваться динамически с помощью информации переданной в событии.

Получение информации уведомления и отображение его на странице
<application xmlns="http://n2oapp.net/framework/config/schema/application-3.0">
<events>
<!-- клиент будет прослушивать данные, полученные по указанному destination -->
<stomp-event id="notif" destination="/notifications">
<!-- действие отображения уведомления (атрибуты-ссылки будут прочитаны из пришедших данных) -->
<alert title="{header}" text="{body}" placement="{placement}" color="{severity}" timeout="7000"/>
</stomp-event>
</events>

...
</application>

В примере выше значение атрибутов задается через ссылки на поля пришедшего объекта. Например поле title ссылается на значение поля header.

Возможная структура отправляемого объекта
public class Message {
private String header;
private String body;
private String placement;
private String severity;
...
}

Отправка события

Для отправки событий по STOMP с помощью N2O можно воспользоваться интерфейсом WebSocketController;

Для этого необходимо подключить следующую зависимость.

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

Теперь для отправки останется всего лишь вызвать один из методов WebSocketController. В данном случае сообщение отправляется конкретному пользователю по userId.

Отправка сообщения с сервера
@Autowired
private WebSocketController wsController;
private static final DESTINATION = "/notifications";

public void sendMessage(String userId) {
Message message = new Message();
message.setHeader("Hello World!");
...
wsController.convertAndSendToUser(userId, DESTINATION, message);
...
}
note

Для отправки сообщения всем воспользуйтесь методом convertAndSend(...).

warning

Stomp события можно объявлять только на уровне приложения.