Passer au contenu principal

Routes Registration

Ouvrir dans ChatGPT

En plus de l'enregistrement des routes à l'aide des annotations @Route, il est possible d'enregistrer, de mettre à jour ou de supprimer des routes de manière dynamique à l'exécution en fonction de la logique de l'application, des rôles des utilisateurs ou d'autres conditions. Cette flexibilité vous permet de gérer la navigation de manière plus dynamique, plutôt que de définir statiquement les routes au moment de la compilation.

Enregistrement des routes dynamiquement

Vous pouvez enregistrer une route dynamiquement en utilisant la classe RouteRegistry, qui est accessible via le Router. Cela vous permet d'ajouter de nouvelles routes pendant l'exécution, ce qui rend la navigation flexible.

Exemple : Enregistrement d'une route dynamique

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Enregistrer la route des paramètres dynamiquement
registry.register("/settings", SettingsView.class);

// Naviguer vers la vue des paramètres
router.navigate(SettingsView.class);

Dans cet exemple, la route /settings est enregistrée dynamiquement, et l'application navigue vers la nouvelle vue enregistrée.

Enregistrement conditionnel de routes

Souvent, les routes doivent être ajoutées ou supprimées en fonction de conditions spécifiques telles que les rôles des utilisateurs ou l'état de l'application. Avec le routage dynamique, vous pouvez enregistrer ou désenregistrer des routes de manière conditionnelle à l'exécution.

Exemple : Enregistrement conditionnel basé sur le rôle de l'utilisateur

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Vérifier le rôle de l'utilisateur et enregistrer les routes appropriées
if (user.hasRole("editor")) {
registry.register("/editor/dashboard", EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
registry.register("/viewer/dashboard", ViewerDashboardView.class);
}

// Naviguer vers le tableau de bord approprié
if (user.hasRole("editor")) {
router.navigate(EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
router.navigate(ViewerDashboardView.class);
}

Dans cet exemple :

  • La route /editor/dashboard ou /viewer/dashboard est enregistrée dynamiquement en fonction du rôle de l'utilisateur.
  • L'application navigue vers le tableau de bord approprié en fonction des droits d'accès de l'utilisateur.

Suppression de routes

Tout comme les routes peuvent être ajoutées dynamiquement, elles peuvent également être supprimées à l'exécution lorsqu'elles ne sont plus nécessaires ou lorsque le contexte de l'application change.

Exemple : Suppression d'une route enregistrée

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Supprimer la route pour la vue des paramètres
registry.unregister("/settings");

// Optionnellement, supprimer par classe de composant
registry.unregister(SettingsView.class);

Dans cet exemple, la route /settings est supprimée dynamiquement lorsqu'elle n'est plus nécessaire.

Enregistrement des routes au démarrage de l'application

Vous pouvez enregistrer des routes dynamiques lors de l'initialisation de l'application, permettant à certaines vues d'être disponibles en fonction de l'environnement ou de la configuration au démarrage.

Exemple : Enregistrement des routes lors du démarrage de l'application

@Routify
public class Application extends App {

@Override
protected void onWillRun() {
// Enregistrer une vue de débogage uniquement en mode développement
if (Environment.getCurrent().isDebug()) {
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

registry.register("/debug", DebugView.class);
}
}
}

Dans cet exemple :

  • Une DebugView est enregistrée dynamiquement lors du démarrage de l'application, mais uniquement si l'application fonctionne en mode développement.

Enregistrement de composants annotés @Route dynamiquement

En plus de définir manuellement des routes, il est possible d'enregistrer dynamiquement des composants déjà annotés avec @Route. Cela est utile lorsque vous souhaitez tirer parti de classes pré-annotées mais les enregistrer dynamiquement en fonction de la logique de l'application.

Exemple : Enregistrement d'un composant annoté @Route

@Route("profile")
public class ProfileView extends Composite<Div> {
// Logique de vue du profil
}

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Enregistrer dynamiquement le ProfileView avec son annotation @Route
registry.register(ProfileView.class);

// Naviguer vers le ProfileView
router.navigate(ProfileView.class);

Dans cet exemple :

  • La classe ProfileView est annotée avec @Route("profile").
  • La route est enregistrée dynamiquement à l'exécution en utilisant registry.register(ProfileView.class).

Enregistrement des routes d'un paquet entier

Si votre application a un grand nombre de routes organisées dans un package, vous pouvez enregistrer tous les composants annotés @Route du package de manière dynamique.

Exemple : Enregistrement de toutes les routes d'un paquet

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Enregistrer toutes les routes dans le package "com.myapp.admin"
RouteRegistry.ofPackage(new String[] { "com.myapp.admin" }, registry);

Dans cet exemple :

  • La méthode ofPackage analyse le package com.myapp.admin et enregistre toutes les classes annotées avec @Route.
  • Ceci est particulièrement utile pour les grandes applications avec de nombreuses routes organisées par paquets.

Récupération des routes enregistrées

Pour récupérer une liste de toutes les routes enregistrées dynamiquement, utilisez la classe RouteRegistry. Cela est utile lorsque vous devez gérer ou afficher programmatiquement les routes disponibles.

Exemple : Récupération et affichage de toutes les routes enregistrées

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

List<RouteEntry> routes = registry.getAvailableRouteEntires();
routes.forEach(route -> console().log("Path: " + route.getPath()));

Dans cet exemple, l'application récupère toutes les routes actuellement enregistrées et imprime leurs chemins.

Gestion des alias de routes dynamiquement

webforJ vous permet d'enregistrer plusieurs alias pour une seule vue. Cela signifie que les utilisateurs peuvent accéder à la même vue en utilisant différents chemins d'URL.

Exemple : Enregistrement d'alias de routes dynamiquement

Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

// Enregistrer une route principale
registry.register("/contact", ContactView.class);

// Enregistrer des alias pour la vue de contact
registry.register("/support", ContactView.class);
registry.register("/help", ContactView.class);

Dans cet exemple, la ContactView est accessible via trois chemins différents : /contact, /support et /help.