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

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

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

  • Routes and Navigation - регистрация и обработка маршрутов к экранам приложения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Механизм навигации и истории просмотров URL доступен по умолчанию. Свойство приложения jmix.ui.url-handling-mode позволяет отключить этот механизм, используя значение NONE.