Routes Registration
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é 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 de manière dynamique
Vous pouvez enregistrer une route de manière dynamique à l'aide de la classe RouteRegistry, qui est accessible via le Router. Cela vous permet d'ajouter de nouvelles routes pendant l'exécution, permettant une navigation flexible.
Exemple : Enregistrement d'une route dynamique
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
// Enregistrer la route des paramètres de manière dynamique
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 de manière dynamique et l'application navigue vers la vue nouvellement enregistrée.
Enregistrement conditionnel des 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 conditionnellement à 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/dashboardou/viewer/dashboardest enregistrée de manière dynamique 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 des routes
Tout comme les routes peuvent être ajoutées de manière dynamique, 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");
// En option, supprimer par classe de composant
registry.unregister(SettingsView.class);
Dans cet exemple, la route /settings est supprimée de manière dynamique lorsqu'elle n'est plus requise.
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
DebugViewest enregistrée de manière dynamique lors du démarrage de l'application, mais uniquement si l'application fonctionne en mode développement.
Enregistrement des composants annotés @Route de manière dynamique
En plus de définir manuellement des routes, il est possible d'enregistrer de manière dynamique des composants déjà annotés avec @Route. C'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 de 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
ProfileViewest 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 package 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 package
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
ofPackagescanne le packagecom.myapp.adminet enregistre toutes les classes annotées avec@Route. - Ceci est particulièrement utile pour de grandes applications avec de nombreuses routes organisées par packages.
À partir de 25.11, les frameworks d'intégration peuvent fournir leur propre mécanisme de découverte de routes par le biais du SPI RouteRegistryProvider. Cela permet des fonctionnalités spécifiques au framework telles que l'injection de dépendances pour les routes enregistrées dynamiquement. Voir Route Registry Provider pour plus de détails.
Récupération des routes enregistrées
Pour récupérer une liste de toutes les routes enregistrées de manière dynamique, utilisez la classe RouteRegistry. Cela est utile lorsque vous devez gérer ou afficher programmatique 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 route de manière dynamique
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 dynamique des alias de route
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, le ContactView est accessible via trois chemins différents : /contact, /support, et /help.