3.5.13.4. Генератор маршрутов URL
Иногда необходимо получить правильный URL некоторого экрана приложения, который можно отправить по электронной почте или показать пользователю. Самый простой способ создать его – использовать генератор маршрутов URL.
Генератор маршрутов URL предоставляет API для генерации ссылок на экран редактирования сущности или на экран, определенный его идентификатором или классом. Ссылка также может содержать параметры URL, которые позволяют отобразить внутреннее состояние экрана на URL, чтобы использовать его позже.
В бине UrlRouting
реализован метод getRouteGenerator()
, позволяющий получить экземпляр RouteGenerator
. RouteGenerator
имеет следующие методы:
-
getRoute(String screenId)
– возвращает маршрут для экрана с заданнымscreenId
, например:String route = urlRouting.getRouteGenerator().getRoute("demo_Customer.browse");
Результирующий URL выглядит следующим образом:
route = "http://host:port/context/#main/customers"
-
getRoute(Class<? extends Screen> screenClass)
– генерирует маршрут для экрана с заданнымscreenClass
, например:String route = urlRouting.getRouteGenerator().getRoute(CustomerBrowse.class);
Результирующий URL выглядит следующим образом:
route = "http://host:port/context/#main/customers"
-
getEditorRoute(Entity entity)
– генерирует маршрут к дефолтному экрану редактирования заданной сущности, например:Customer сustomer = customersTable.getSingleSelected(); String route = urlRouting.getRouteGenerator().getEditorRoute(сustomer);
Результирующий URL выглядит следующим образом:
route = "http://localhost:8080/app/#main/customers/edit?id=5jqtc3pwzx6g6mq1vv5gkyjn0s"
-
getEditorRoute(Entity entity, Class<? extends Screen> screenClass)
– генерирует маршрут для экрана редактирования с заданнымиscreenClass
иentity
. -
getRoute(Class<? extends Screen> screenClass, Map<String, String> urlParams)
– генерирует маршрут для экрана с заданнымиscreenClass
иurlParams
.
- Пример использования генератора маршрутов URL
-
Предположим, что у нас есть сущность
Customer
со стандартными экранами, для которых зарегистрированы маршруты. Добавим на экран браузера кнопку, которая генерирует ссылку на экран редактирования выбранной сущности:
@Inject
private UrlRouting urlRouting;
@Inject
private GroupTable<Customer> customersTable;
@Inject
private Dialogs dialogs;
@Subscribe("getLinkButton")
public 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();
}
}
Результирующий маршрут выглядит следующим образом: