Адаптация параметров запроса URL при переходе между представлениями в Vaadin Flow - PullRequest
1 голос
/ 04 февраля 2020

Мне любопытно: есть ли возможность изменить параметры запроса URL при переходе от одного представления к другому в общем виде?

Какой у меня вариант использования? Я хотел бы добавить параметр запроса "referrer" к URL при переходе от представления A к представлению C. Это также следует делать при переходе от вида B к C. Когда представление C открыто, выполняется какое-то действие, которое должно вернуться к предыдущему виду. Эта информация «предыдущего просмотра» может затем быть определена параметром запроса URL «referrer». Для конкретного примера это уже работает.

Более того, я хотел бы обобщить поведение с некоторыми аннотациями для классов представления. Например, вид A и B помечены моей @ReferrerSource, а вид C - моей @ReferrerTarget. Поэтому каждый раз, когда в моем приложении происходит навигация, я хотел бы рассмотреть эти аннотации представления и добавить параметр URL-адреса "referrer" по требованию.

Возможно ли это вообще?

1 Ответ

1 голос
/ 05 февраля 2020

Исходный вид источника:
при переходе от вида, вы можете сделать это с помощью метода UI.getCurrent().navigate(String location, QueryParameters queryParameters).
. Или, если вы используете RouterLink для навигации, вы можете установить там тоже параметры запроса: routerLink.setQueryParameters(QueryParameters queryParameters).

Это не то, что можно сделать с помощью аннотации или интерфейса, как это нельзя сделать ни в каком виде навигации Observer. Оптимально, вы должны иметь возможность добавить элемент queryParameter referrer к BeforeLeaveEvent, но я не думаю, что вы можете сделать это еще (вы можете получить QueryParameters из него, но вы не можете редактировать их там).


просмотр цели реферера:
Вы можете прочитать параметры url из beforeEnterEvent или afterNavigationEvent в представлении цели реферера. Значение реферера вы можете сохранить в поле представления и использовать его, когда пользователь нажимает кнопку «предыдущий просмотр». Я не уверен, как вы могли бы сделать это с помощью аннотации, но это должно быть выполнимо с интерфейсом, если вы хотите.

@Override
public void afterNavigation(AfterNavigationEvent event) {
    Map<String, List<String>> parameters = afterNavigationEvent.getLocation().getQueryParameters().getParameters();
    // TODO: check parameters for your referrer parameter, and save it in the view
}

Другое возможное решение - оставить QueryParameters в одиночку, и сохраните предыдущий вид в области пользовательского интерфейса (как вы недавно советовали в один из ваших собственных ответов ; P). Теперь, начиная с Vaadin 14, я действительно не уверен, как это работает, поскольку экземпляр пользовательского интерфейса перестраивается после навигации. Но я уверен, что есть хорошее решение, об этом topi c можно найти много обсуждений на SO, форумах vaadin и vaadin github.

...