Saltar al contenido principal

Routes Registration

Abrir en ChatGPT

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 paquete com.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.