Skip to main content

Контекст

Контекст пользователя — это любая информация о текущем пользователе приложения.

Использование#

К контексту пользователя существует быстрый доступ из некоторых мест в XML через "решётку" и фигурные скобки:

Контекст в значении по умолчанию поля
<input-text id="login" default-value="#{username}"/>

Места применения контекста в XML

МестоОписание
*/[control]/@default-valueЗначение по умолчанию поля ввода
/query/fields/field/filters/[filter-type]/@default-valueЗначение по умолчанию фильтра выборки
/query/fields/field/select/@default-valueЗначение по умолчанию поля выборки
/object/operations/operation/in/field/@default-valueЗначение по умолчанию входящего параметра операции
/object/operations/operation/out/field/@default-valueЗначение по умолчанию исходящего параметра операции
*/filters/[filter-type]/@valueЗначение предустановленного фильтра
/access/*/object-access/[filter-type]/@valueЗначение фильтра доступа

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

Обязательный контекст в значении по умолчанию поля
<input-text id="name" default-value="#{firstName!}"/>

Подключение#

Для подключения контекста необходимо задать Spring бин ContextEngine. В N2O существует 2 реализации контекста:

  • ConcurrentMapContextEngine - контекст на основе ConcurrentHashMap (подключен по умолчанию)
  • SessionContextEngine - контекст на основе сессии приложения

Можно подключить свою реализацию контекста на основе текущей системы аутентификации:

Пример реализации контекста при OAuth аутентификации
@Componentclass OAuthContextEngine extends SessionContextEngine {    @Override    public Object get(String name) {        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();        Map<String, Object> attributes = ((DefaultOidcUser)principal).getAttributes();        Object value = attributes.get(name);        return value != null ? value : super.get(name);    }}