События
В 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>
Событие изменения данных можно объявлять только на страницах.
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;
...
}