Vaadin Flow Redirection vers une route spécifique lors du rechargement de la page


Sangeeth S Kumar

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.

schaphekar

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' @RouteAliasannotation. 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 BeforeEnterObserveret en vérifiant le fichier NavigationTrigger.

Ce sera PAGE_LOADlors de la navigation directe par URL ou lors du rafraîchissement de l'onglet du navigateur, ROUTER_LINKlors de l'utilisation de a RouterLinket UI_NAVIGATElors 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);
        }
    }
}

Articles connexes


.htaccess redirection vers une route spécifique

Dhimant Jadeja J'ai besoin de rediriger un ensemble de pages spécifiques avec des paramètres particuliers dans l'URL. Je connais un peu les redirections .htaccess mais celle-ci me donne mal à la tête. Je souhaite rediriger https://www.xxxxxx.com/index.php?page

ngOnDestroy lors du rechargement de la page

Maruthi Eranki J'essaie de comprendre et d'expérimenter les hooks de cycle de vie angulaires. En ce qui concerne ngOnDestroy, dans la documentation officielle, il est dit: Un hook de cycle de vie qui est appelé lorsqu'une directive, un canal ou un service est