Routes Registration
Además de registrar rutas usando las anotaciones @Route
, es posible registrar, actualizar o eliminar rutas de manera dinámica en tiempo de ejecución según la lógica de la aplicación, los roles de usuario u otras condiciones. Esta flexibilidad te permite gestionar la navegación de manera más dinámica, en lugar de definir rutas de forma estática en tiempo de compilación.
Registrando rutas dinámicamente
Puedes registrar una ruta dinámicamente utilizando la clase RouteRegistry
, que es accesible a través del Router
. Esto te permite agregar nuevas rutas durante el tiempo de ejecución, habilitando una navegación flexible.
Ejemplo: Registrando una ruta dinámica
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
// Registrar la ruta de configuración dinámicamente
registry.register("/settings", SettingsView.class);
// Navegar a la vista de configuración
router.navigate(SettingsView.class);
En este ejemplo, la ruta /settings
se registra dinámicamente y la aplicación navega a la vista recién registrada.
Registro condicional de rutas
A menudo, las rutas necesitan ser añadidas o eliminadas según condiciones específicas como los roles de usuario o el estado de la aplicación. Con el enrutamiento dinámico, puedes registrar o anular el registro de rutas condicionalmente en tiempo de ejecución.
Ejemplo: registro condicional basado en el rol de usuario
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
// Verificar rol de usuario y registrar rutas apropiadas
if (user.hasRole("editor")) {
registry.register("/editor/dashboard", EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
registry.register("/viewer/dashboard", ViewerDashboardView.class);
}
// Navegar al tablero apropiado
if (user.hasRole("editor")) {
router.navigate(EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
router.navigate(ViewerDashboardView.class);
}
En este ejemplo:
- La ruta
/editor/dashboard
o/viewer/dashboard
se registra dinámicamente según el rol del usuario. - La aplicación navega al tablero apropiado basado en los derechos de acceso del usuario.
Eliminando rutas
Así como las rutas pueden ser añadidas dinámicamente, también pueden ser eliminadas en tiempo de ejecución cuando ya no son necesarias, o cuando el contexto de la aplicación cambia.
Ejemplo: Eliminando una ruta registrada
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
// Eliminar la ruta de la vista de configuración
registry.unregister("/settings");
// Opcionalmente, eliminar por clase de componente
registry.unregister(SettingsView.class);
En este ejemplo, la ruta /settings
se elimina dinámicamente cuando ya no es requerida.
Registrando rutas al inicio de la aplicación
Puedes registrar rutas dinámicas durante la inicialización de la aplicación, permitiendo que ciertas vistas estén disponibles según el entorno o la configuración al inicio.
Ejemplo: Registrando rutas durante el inicio de la aplicación
@Routify
public class Application extends App {
@Override
protected void onWillRun() {
// Registrar una vista de depuración solo en modo de desarrollo
if (Environment.getCurrent().isDebug()) {
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
registry.register("/debug", DebugView.class);
}
}
}
En este ejemplo:
- Una
DebugView
se registra dinámicamente durante el inicio de la aplicación, pero solo si la aplicación está ejecutándose en modo de desarrollo.
Registrando componentes anotados con @Route
dinámicamente
Además de definir rutas manualmente, es posible registrar dinámicamente componentes ya anotados con @Route
. Esto es útil cuando quieres aprovechar clases pre-anotadas pero registrarlas dinámicamente según la lógica de la aplicación.
Ejemplo: Registrando un componente anotado con @Route
@Route("profile")
public class ProfileView extends Composite<Div> {
// Lógica de vista de perfil
}
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
// Registrar dinámicamente el ProfileView con su anotación @Route
registry.register(ProfileView.class);
// Navegar a la ProfileView
router.navigate(ProfileView.class);
En este ejemplo:
- La clase
ProfileView
está anotada con@Route("profile")
. - La ruta se registra dinámicamente en tiempo de ejecución usando
registry.register(ProfileView.class)
.
Registrando rutas desde un paquete entero
Si tu aplicación tiene un gran número de rutas organizadas dentro de un paquete, puedes registrar todos los componentes anotados con @Route
desde el paquete de manera dinámica.
Ejemplo: Registrando todas las rutas desde un paquete
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
// Registrar todas las rutas dentro del paquete "com.myapp.admin"
RouteRegistry.ofPackage(new String[] { "com.myapp.admin" }, registry);
En este ejemplo:
- El método
ofPackage
escanea el paquetecom.myapp.admin
y registra todas las clases anotadas con@Route
. - Esto es particularmente útil para aplicaciones grandes con numerosas rutas organizadas por paquetes.
Recuperando rutas registradas
Para recuperar una lista de todas las rutas registradas dinámicamente, utiliza la clase RouteRegistry
. Esto es útil cuando necesitas gestionar o mostrar programáticamente las rutas disponibles.
Ejemplo: Recuperando y mostrando todas las rutas registradas
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
List<RouteEntry> routes = registry.getAvailableRouteEntires();
routes.forEach(route -> console().log("Path: " + route.getPath()));
En este ejemplo, la aplicación recupera todas las rutas actualmente registradas y muestra sus rutas.
Gestionando alias de rutas dinámicamente
webforJ te permite registrar múltiples alias para una sola vista. Esto significa que los usuarios pueden acceder a la misma vista utilizando diferentes rutas URL.
Ejemplo: Registrando alias de rutas dinámicamente
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();
// Registrar una ruta principal
registry.register("/contact", ContactView.class);
// Registrar alias para la vista de contacto
registry.register("/support", ContactView.class);
registry.register("/help", ContactView.class);
En este ejemplo, la ContactView
es accesible a través de tres rutas diferentes: /contact
, /support
y /help
.