Zum Hauptinhalt springen

Routes Registration

In ChatGPT öffnen

Zusätzlich zur Registrierung von Routen mithilfe der @Route-Annotationen ist es möglich, Routen zur Laufzeit dynamisch zu registrieren, zu aktualisieren oder zu entfernen, basierend auf der Logik der App, Benutzerrollen oder anderen Bedingungen. Diese Flexibilität ermöglicht es Ihnen, die Navigation dynamischer zu gestalten, anstatt Routen statisch zur Kompilierzeit zu definieren.

Dynamische Routenregistrierung

Sie können eine Route dynamisch mithilfe der Klasse RouteRegistry registrieren, die über den Router zugänglich ist. Dies ermöglicht es Ihnen, während der Laufzeit neue Routen hinzuzufügen und eine flexible Navigation zu ermöglichen.

Beispiel: Registrierung einer dynamischen Route

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

// Registrieren Sie die Einstellungsroute dynamisch
registry.register("/settings", SettingsView.class);

// Navigieren Sie zur Einstellungsansicht
router.navigate(SettingsView.class);

In diesem Beispiel wird die Route /settings dynamisch registriert, und die App navigiert zu der neu registrierten Ansicht.

Bedingte Routenregistrierung

Oft müssen Routen basierend auf spezifischen Bedingungen wie Benutzerrollen oder dem Zustand der App hinzugefügt oder entfernt werden. Mit dynamischem Routing können Sie Routen bedingt zur Laufzeit registrieren oder deregistrieren.

Beispiel: Bedingte Registrierung basierend auf der Benutzerrolle

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

// Überprüfen Sie die Benutzerrolle und registrieren Sie die entsprechenden Routen
if (user.hasRole("editor")) {
registry.register("/editor/dashboard", EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
registry.register("/viewer/dashboard", ViewerDashboardView.class);
}

// Navigieren Sie zum entsprechenden Dashboard
if (user.hasRole("editor")) {
router.navigate(EditorDashboardView.class);
} else if (user.hasRole("viewer")) {
router.navigate(ViewerDashboardView.class);
}

In diesem Beispiel:

  • Die Route /editor/dashboard oder /viewer/dashboard wird dynamisch basierend auf der Benutzerrolle registriert.
  • Die App navigiert zum entsprechenden Dashboard, basierend auf den Zugriffsrechten des Benutzers.

Entfernen von Routen

So wie Routen dynamisch hinzugefügt werden können, können sie auch zur Laufzeit entfernt werden, wenn sie nicht mehr benötigt werden oder wenn sich der Kontext der App ändert.

Beispiel: Entfernen einer registrierten Route

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

// Entfernen Sie die Route für die Einstellungsansicht
registry.unregister("/settings");

// Optional, entfernen Sie sie nach Komponentenklasse
registry.unregister(SettingsView.class);

In diesem Beispiel wird die Route /settings dynamisch entfernt, wenn sie nicht mehr benötigt wird.

Registrierung von Routen beim App-Start

Sie können dynamische Routen während der App-Initialisierung registrieren, sodass bestimmte Ansichten basierend auf der Umgebung oder Konfiguration beim Start verfügbar sind.

Beispiel: Registrierung von Routen während des App-Starts

@Routify
public class Application extends App {

@Override
protected void onWillRun() {
// Registrieren Sie eine Debug-Ansicht nur im Entwicklungsmodus
if (Environment.getCurrent().isDebug()) {
Router router = Router.getCurrent();
RouteRegistry registry = router.getRegistry();

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

In diesem Beispiel:

  • Eine DebugView wird während des App-Starts dynamisch registriert, aber nur, wenn die App im Entwicklungsmodus läuft.

Registrierung von @Route-annotierten Komponenten dynamisch

Zusätzlich zur manuellen Definition von Routen ist es möglich, Komponenten, die bereits mit @Route annotiert sind, dynamisch zu registrieren. Dies ist nützlich, wenn Sie vorab annotierte Klassen nutzen möchten, diese jedoch dynamisch basierend auf der Logik der App registrieren wollen.

Beispiel: Registrierung einer @Route-annotierten Komponente

@Route("profile")
public class ProfileView extends Composite<Div> {
// Logik für die Profilansicht
}

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

// Dynamisch registrieren der ProfileView mit ihrer @Route-Annotation
registry.register(ProfileView.class);

// Navigieren Sie zur ProfileView
router.navigate(ProfileView.class);

In diesem Beispiel:

  • Die Klasse ProfileView ist mit @Route("profile") annotiert.
  • Die Route wird zur Laufzeit dynamisch mithilfe von registry.register(ProfileView.class) registriert.

Registrierung von Routen aus einem gesamten Paket

Wenn Ihre App eine große Anzahl von Routen hat, die innerhalb eines Pakets organisiert sind, können Sie alle @Route-annotierten Komponenten aus dem Paket dynamisch registrieren.

Beispiel: Registrierung aller Routen aus einem Paket

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

// Registrieren Sie alle Routen im Paket "com.myapp.admin"
RouteRegistry.ofPackage(new String[] { "com.myapp.admin" }, registry);

In diesem Beispiel:

  • Die Methode ofPackage durchsucht das Paket com.myapp.admin und registriert alle Klassen, die mit @Route annotiert sind.
  • Dies ist besonders nützlich für große Anwendungen mit zahlreichen Routen, die paketweise organisiert sind.

Abrufen registrierter Routen

Um eine Liste aller dynamisch registrierten Routen abzurufen, verwenden Sie die Klasse RouteRegistry. Dies ist nützlich, wenn Sie verfügbare Routen programmgesteuert verwalten oder anzeigen müssen.

Beispiel: Abrufen und Anzeigen aller registrierten Routen

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

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

In diesem Beispiel ruft die App alle derzeit registrierten Routen ab und gibt deren Pfade aus.

Dynamisches Verwalten von Routen-Aliassen

webforJ ermöglicht es Ihnen, mehrere Aliasse für eine einzige Ansicht zu registrieren. Das bedeutet, dass Benutzer auf dieselbe Ansicht über verschiedene URL-Pfade zugreifen können.

Beispiel: Dynamisches Registrieren von Routen-Aliassen

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

// Registrieren Sie eine Primärroute
registry.register("/contact", ContactView.class);

// Registrieren Sie Aliasse für die Kontaktansicht
registry.register("/support", ContactView.class);
registry.register("/help", ContactView.class);

In diesem Beispiel ist die ContactView über drei verschiedene Pfade zugänglich: /contact, /support und /help.