Генератор маршрутов URL

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

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

В бине UrlRouting реализован метод getRouteGenerator(), позволяющий получить экземпляр RouteGenerator. RouteGenerator имеет следующие методы:

  • getRoute(String screenId) - возвращает маршрут для экрана с заданным screenId, например:

    String route = urlRouting.getRouteGenerator().getRoute("uiex1_Customer.browse");

    Результирующий URL будет похож на http://host:port/#main/customers

  • getRoute(Class<? extends Screen> screenClass) - генерирует маршрут для экрана с заданным screenClass, например:

    String route = urlRouting.getRouteGenerator().getRoute(CustomerBrowse.class);

    Результирующий URL будет похож на http://host:port/#main/customers

  • getEditorRoute(Object entity) - генерирует маршрут к дефолтному экрану редактирования заданной сущности, например:

    Customer e = customerField.getValue();
    
    String route = urlRouting.getRouteGenerator().getEditorRoute(e);

    Результирующий URL будет похож на http://host:port/#main/customers/edit?id=5jqtc3pwzx6g6mq1vv5gkyjn0s

  • getEditorRoute(Object entity, Class<? extends Screen> screenClass) - генерирует маршрут для экрана редактирования с заданными screenClass и entity.

  • getRoute(Class<? extends Screen> screenClass, Map<String, String> urlParams) - генерирует маршрут для экрана с заданными screenClass и urlParams.

Пример использования генератора маршрутов URL

Предположим, что у нас есть сущность Customer со стандартными экранами, для которых зарегистрированы маршруты. Добавим на экран браузера кнопку, которая генерирует ссылку на экран редактирования выбранной сущности:

@Autowired
protected UrlRouting urlRouting;

@Autowired
protected Dialogs dialogs;

@Subscribe("getLinkButton")
protected void onGetLinkButtonClick(Button.ClickEvent event) {
    Customer selectedCustomer = customersTable.getSingleSelected();
    if (selectedCustomer != null) {
        String routeToSelectedRole = urlRouting.getRouteGenerator()
                .getEditorRoute(selectedCustomer);

        dialogs.createMessageDialog()
                .withCaption("Generated route")
                .withMessage(routeToSelectedRole)
                .withWidth("710")
                .show();
    }
}

Результирующий маршрут выглядит следующим образом:

customer route