3.5.13.2. API маршрутизации
В этом разделе описываются ключевые понятия API маршрутизации.
- Регистрация маршрута
-
Для регистрации маршрута экрана добавьте аннотацию
@Routeк контроллеру экрана, например:@Route("my-screen") public class MyScreen extends Screen { }Аннотация имеет три параметра:
-
path(илиvalue) – собственно маршрут; -
parentPrefixиспользуется для сжатия маршрутов (смотрите ниже). -
root– это свойство типаboolean, позволяющее указать, зарегистрирован ли маршрут для корневого экрана (например, экран входа в систему или главный экран). Значение по умолчанию –false.Если вы хотите создать корневой экран с маршрутом, отличным от
login, и сделать его доступным по ссылке без входа в систему, вы должны разрешить его просмотр анонимным пользователям. В противном случае при вводе URL вида/app/#your_root_screenпользователь будет перенаправлен на/app/#loginвместо открытия вашего корневого экрана.-
Добавьте
cuba.web.allowAnonymousAccess = trueв файлweb-app.properties. -
Разрешите просмотр созданного экрана для анонимных пользователей: запустите приложение, перейдите в Администрирование > Роли и создайте новую роль с доступом к вашему экрану. Затем назначьте созданную роль пользователю anonymous.
-
Если вам нужно определить маршрут для устаревшего экрана, добавьте атрибут
route(и необязательноrouteParentPrefix, эквивалентный параметруparentPrefix, иrootRoute, эквивалентный параметруroot) к элементу экрана в файле screens.xml, например:<screen id="myScreen" template="..." route="my-screen" /> -
- Сжатие маршрута
-
Эта функция предназначена для того, чтобы URL был понятным и читаемым при открытии нескольких экранов с маршрутами, имеющими одинаковые части.
Предположим, что у нас есть экраны браузера и редактора для сущности
Order:@Route("orders") public class OrderBrowser extends StandardLookup<Order> { } @Route("orders/edit") public class OrderEditor extends StandardEditor<Order> { }Сжатие URL используется, чтобы избежать повторения маршрута
ordersв URL, когда экран редактора открывается сразу после браузера. Просто укажите повторяющуюся часть в параметреparentPrefixаннотации@Routeна экране редактора:@Route("orders") public class OrderBrowser extends StandardLookup<Order> { } @Route(value = "orders/edit", parentPrefix = "orders") public class OrderEditor extends StandardEditor<Order> { }Теперь, когда редактор открыт в той же вкладке, что и браузер, полученный адрес будет похож на
app/#main/0/orders/edit?id=…
- Отображение состояния пользовательского интерфейса на URL
-
Бин
UrlRoutingпозволяет изменять текущий URL приложения в соответствии с текущим экраном и некоторыми параметрами. Он имеет следующие методы:-
pushState()– изменяет адрес и отправляет новую запись истории браузера; -
replaceState()– заменяет адрес без добавления новой записи истории браузера; -
getState()– возвращает текущее состояние как объектNavigationState.
Методы
pushState()/replaceState()принимают текущий контроллер экрана и дополнительный мэп параметров.Смотрите пример использования
UrlRoutingв разделе ниже. -