3.5.13. Навигация и история просмотров URL

Механизм навигации и истории просмотров URL фреймворка CUBA предоставляет функциональность, которая важна для многих веб-приложений. Механизм состоит из следующих частей:

  • История – обработка нажатия на кнопку Back браузера. Кнопка Forward не поддерживается из-за невозможности воспроизвести все условия открытия экрана.

  • Маршруты и навигация – регистрация и обработка маршрутов к экранам приложения.

  • API маршрутизации – набор методов, позволяющих отобразить текущее состояние экрана на URL.

Фрагмент – это последняя часть URL после символа "#". Эта часть используется для обозначение маршрута.

В качестве примера рассмотрим следующий URL:

host:port/app/#main/42/orders/edit?id=17

В этом URL main/42/orders/edit?id=17 представляет собой фрагмент, который состоит из следующих частей:

  • main – маршрут до корневого экрана (главного экрана приложения);

  • 42метка состояния, которая используется внутренними элементами механизма навигации;

  • orders/edit – маршрут вложенного экрана;

  • ?id=17 – часть с параметрами.

Все открытые экраны отображают свои маршруты на текущий URL. Например, если экран просмотра пользователей открыт и активен в данный момент, URL приложения выглядит следующим образом:

http://localhost:8080/app/#main/0/users

Если экран не имеет зарегистрированного маршрута, к фрагменту URL добавляется только метка состояния. Например:

http://localhost:8080/app/#main/42

Для экранов редактирования идентификатор редактируемой сущности добавляется к адресу в качестве параметра, если экран имеет зарегистрированный маршрут. Например,

http://localhost:8080/app/#main/1/users/edit?id=27zy3tj6f47p2e3m4w58vdca9y

Идентификаторы типа UUID кодируются как Base32 Crockford Encoding, все остальные типы используются как есть.

Когда пользователь не выполнил вход в приложение, но при этом запрошен маршрут некоторого экрана, используется параметр переадресации. Предположим, в адресной строке введен маршрут app/#main/orders. Когда приложение загружается, и отображается экран входа в систему, адрес будет изменен на: app/#login?redirectTo=orders. После входа в систему откроется экран, соответствующий маршруту orders.

Если запрошенный маршрут не существует, приложение показывает пустой экран с надписью "Не найдено".

Механизм навигации и истории просмотров URL доступен по умолчанию. Свойство приложения cuba.web.urlHandlingMode позволяет отключить этот механизм, используя значение NONE, или вернуться к старому механизму работы с кнопкой Back браузера, используя значение BACK_ONLY.