Vaadin Flow Redirection vers une route spécifique lors du rechargement de la page
J'utilise Vaadin Flow. Je suis confronté à un problème selon lequel après avoir navigué vers un itinéraire et si je recharge la page, j'arrive toujours sur la même page (c'est ainsi que cela devrait fonctionner, je suppose). Je souhaite rediriger vers un itinéraire spécifique lors du rechargement. Quelque chose comme capturer l'événement de rechargement et rediriger vers un itinéraire spécifique.
Pour Ex.
http://localhost:9090/user - L'itinéraire actuel sur lequel je suis actuellement.
http://localhost:9090/ - L'itinéraire vers lequel je dois naviguer sur Reload of Page.
Merci d'avance.
Votre question n'est pas très claire si vous voulez juste
a) alias ou
b) pour créer une vue qui n'est affichée qu'une seule fois et qui redirige ensuite l'utilisateur ailleurs.
Pour les alias, il existe une solution très simple consistant à utiliser l' @RouteAlias
annotation. Cela permet d'ajouter plusieurs itinéraires à la vue.
@Route(value = "", layout = MainLayout.class)
@RouteAlias(value = "main", layout = MainLayout.class)
public class MainView extends VerticalLayout {
...
}
Pour le deuxième cas, je me pencherais sur BeforeEnterEvent
, qui est déclenché pendant la navigation et facilite la redirection (voir : https://vaadin.com/docs/v14/flow/routing/tutorial-routing-lifecycle ). Vous aurez également besoin de @PreserveOnRefresh
, car sinon une nouvelle instance de vue sera créée et le nombre sera toujours égal à zéro.
@PreserveOnRefresh
@Route(value = "", layout = MainLayout.class)
public class MainView extends VerticalLayout implements BeforeEnterObserver {
private int count = 0;
@Override
public void beforeEnter(BeforeEnterEvent event) {
if (count > 0) {
event.forwardTo(OtherView.class);
}
count++;
}
}
Si vous préférez restreindre la navigation à cette vue, afin qu'elle ne puisse se produire que via votre application et non par lien direct (ou actualisation), vous pouvez le faire avec un BeforeEnterObserver
et en vérifiant le fichier NavigationTrigger
.
Ce sera PAGE_LOAD
lors de la navigation directe par URL ou lors du rafraîchissement de l'onglet du navigateur, ROUTER_LINK
lors de l'utilisation de a RouterLink
et UI_NAVIGATE
lors de l'utilisation de UI#navigate
.
Notez qu'un utilisateur peut créer un lien de routeur dans le navigateur même si vous n'en avez pas créé, vous ne devriez donc pas vous y fier pour la sécurité.
@Route
public class ExampleView extends VerticalLayout implements BeforeEnterObserver {
public ExampleView() {
add("Hello");
}
@Override
public void beforeEnter(BeforeEnterEvent beforeEnterEvent) {
if (beforeEnterEvent.getTrigger() == NavigationTrigger.PAGE_LOAD) {
beforeEnterEvent.rerouteTo(MainView.class);
}
}
}