3.9.15. Ссылки на экраны
В разделе Навигация и история просмотров URL описывается более продвинутая функциональность по отображению URL на экраны приложения. |
Блок Web Client позволяет открывать экраны приложения по команде, переданной в URL. Причем если в данный момент в браузере нет сессии приложения с зарегистрированным пользователем, то сначала будет отображено окно логина, и сразу после успешной регистрации - главное окно приложения с требуемым экраном.
Набор возможных команд указывается в свойстве приложения cuba.web.linkHandlerActions, по умолчанию это команды open
и o
. При обработке HTTP запроса анализируется последняя часть URL, и если она совпадает с одной из команд, управление передается в соответствующий процессор, который является бином, реализующим интерфейс LinkHandlerProcessor
.
Платформа предоставляет процессор, принимающий следующие параметры запроса:
-
screen
- имя экрана, указанное в screens.xml, например:http://localhost:8080/app/open?screen=sec$User.browse
-
item
- экземпляр сущности для передачи в экран редактирования, закодированный по правилам классаEntityLoadInfo
, т.е.entityName-instanceId
илиentityName-instanceId-viewName
. Примеры:http://localhost:8080/app/open?screen=sec$User.edit&item=sec$User-60885987-1b61-4247-94c7-dff348347f93 http://localhost:8080/app/open?screen=sec$User.edit&item=sec$User-60885987-1b61-4247-94c7-dff348347f93-user.edit
Для открытия экрана создания нового экземпляра сущности в данном параметре нужно передать строку вида
NEW-entityName
:http://localhost:8080/app/open?screen=sec$User.edit&item=NEW-sec$User
-
params
- параметры экрана, передаваемые в методinit()
контроллера. Параметры кодируются в видеname1:value1,name2:value2
. Значениями параметров могут быть экземпляры сущностей, в свою очередь закодированные по правилам классаEntityLoadInfo
. Примеры:http://localhost:8080/app/open?screen=sales$Customer.lookup¶ms=p1:v1,p2:v2 http://localhost:8080/app/open?screen=sales$Customer.lookup¶ms=p1:sales$Customer-01e37691-1a9b-11de-b900-da881aea47a6
Если вам необходимо добавить обработку специфических команд, выполните следующие шаги:
-
Создайте в модуле web проекта бин, реализующий интерфейс
LinkHandlerProcessor
. -
Метод
canHandle()
бина должен возвращать true, если текущий URL, параметры которого переданы в объектеExternalLinkContext
, должен быть обработан данным бином. -
В методе
handle()
выполните необходимые действия.
Ваш бин может опционально реализовывать интерфейс Ordered
или содержать аннотацию Order
фреймворка Spring. Тогда вы сможете указать позицию вашего бина в цепочке процессоров. Используйте константы HIGHEST_PLATFORM_PRECEDENCE
и LOWEST_PLATFORM_PRECEDENCE
интерфейса LinkHandlerProcessor
чтобы поместить ваш бин до или после процессоров, определенных в платформе. Так, если вы укажете порядок числом, меньшим HIGHEST_PLATFORM_PRECEDENCE
, ваш бин будет запрошен раньше, и вы при необходимости сможете переопределить поведение, заданное процессором платформы.