В разделе Навигация и история просмотров 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&params=p1:v1,p2:v2
    
    http://localhost:8080/app/open?screen=sales$Customer.lookup&params=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, ваш бин будет запрошен раньше, и вы при необходимости сможете переопределить поведение, заданное процессором платформы.