Routing
In modernen Webanwendungen bezieht sich Routing auf den Prozess der Verwaltung von Navigation zwischen verschiedenen Ansichten oder Komponenten basierend auf der aktuellen URL oder dem Pfad. In webforJ etabliert Routing ein ausgefeiltes Framework für Client-seitige Navigation, bei dem UI-Updates dynamisch erfolgen, ohne vollständige Seitenneuladungen, was die Leistung Ihrer App verbessert.
Traditionelles vs. Client-seitiges Routing
Beim traditionellen serverseitigen Routing sendet der Browser, wenn ein Benutzer auf einen Link klickt, eine Anfrage an den Server nach einem neuen Dokument. Der Server antwortet mit einer neuen HTML-Seite, die den Browser zwingt, CSS und JavaScript neu zu evaluieren, das gesamte Dokument neu zu rendern und den Zustand der App zurückzusetzen. Dieser Zyklus führt zu Verzögerungen und Ineffizienzen, da der Browser Ressourcen und den Seitenzustand neu laden muss. Der Prozess umfasst typischerweise:
- Anfrage: Der Benutzer navigiert zu einer neuen URL, was eine Anfrage an den Server auslöst.
- Antwort: Der Server sendet ein neues HTML-Dokument zusammen mit zugehörigen Assets (CSS, JS) zurück.
- Rendering: Der Browser rendert die gesamte Seite neu, verliert oft den Zustand zuvor geladener Seiten.
Dieser Ansatz kann zu Leistungsengpässen und suboptimalen Benutzererfahrungen aufgrund wiederholter vollständiger Seitenneuladungen führen.
Client-seitiges Routing in webforJ löst dies, indem es Navigation direkt im Browser ermöglicht, die UI dynamisch aktualisiert, ohne eine neue Anfrage an den Server zu senden. So funktioniert es:
- Einfache initiale Anfrage: Der Browser lädt die App einmal, einschließlich aller erforderlichen Assets (HTML, CSS, JavaScript).
- URL-Management: Der Router hört auf URL-Änderungen und aktualisiert die Ansicht basierend auf der aktuellen Route.
- Dynamisches Rendering von Komponenten: Der Router verknüpft die URL mit einer Komponente und rendert sie dynamisch, ohne die Seite zu aktualisieren.
- Zustandserhaltung: Der Zustand der App bleibt zwischen den Navigationen erhalten, was einen reibungslosen Übergang zwischen den Ansichten gewährleistet.
Dieses Design ermöglicht Deep Linking und URL-gesteuertes Zustandsmanagement, sodass Benutzer spezifische Seiten innerhalb der App bookmarken und teilen können, während sie ein reibungsloses Erlebnis auf einer einzelnen Seite genießen.
Kernprinzipien
- URL-basiertes Komponenten-Mapping: In webforJ sind Routen direkt mit UI-Komponenten verbunden. Ein URL-Muster wird einer bestimmten Komponente zugeordnet, die bestimmt, welcher Inhalt basierend auf dem aktuellen Pfad angezeigt wird.
- Deklaratives Routing: Routen werden deklarativ definiert, typischerweise unter Verwendung von Anmerkungen. Jede Route entspricht einer Komponente, die gerendert wird, wenn die Route übereinstimmt.
- Dynamische Navigation: Der Router wechselt dynamisch zwischen Ansichten, ohne die Seite neu zu laden, und hält die App reaktionsschnell und schnell.
Beispiel für client-seitiges Routing in webforJ
Hier ist ein Beispiel für die Definition einer Route für eine UserProfileView-Komponente, um Benutzerdetails basierend auf dem id-Parameter in der URL anzuzeigen:
@Route(value = "user/:id")
public class UserProfileView extends Composite<Div> implements DidEnterObserver {
@Override
public void onDidEnter(DidEnterEvent event, ParametersBag parameters) {
String id = parameters.getAlpha("id").orElse("");
refreshProfile(id);
}
}
In diesem Setup:
- Die Navigation zu
/user/johnwürde dieUserProfileView-Komponente rendern. - Der
id-Parameter würdejohnaus der URL erfassen und es Ihnen ermöglichen, ihn innerhalb der Komponente zu verwenden, um Benutzerdaten abzurufen und anzuzeigen.
Themen
📄️ Routable Apps
Routing in webforJ ist ein optionales Werkzeug. Entwickler können zwischen der webforJ-Routing-Lösung oder einem traditionellen Modell mit Frame-Manipulation und ohne Deep Linking wählen. Um Routing zu aktivieren, muss die @Routify-Annotation auf der Ebene einer Klasse, die App implementiert, angewendet werden. Dies gibt webforJ die Autorität, den Browser-Verlauf zu verwalten, auf Navigationsereignisse zu reagieren und die Komponenten der Anwendung basierend auf der URL zu rendern.
📄️ Defining Routes
Die Definition von Routen ist entscheidend, um URLs bestimmten Komponenten zuzuordnen. Dadurch können Sie steuern, wie verschiedene Teile Ihrer Benutzeroberfläche basierend auf der URL-Struktur gerendert werden. Das Framework verwendet die @Route-Annotation, um diesen Prozess deklarativ und unkompliziert zu gestalten, wodurch der Bedarf an manueller Konfiguration verringert wird.
📄️ Route Navigation
In webforJ ist die Navigation zwischen Routen der zentrale Mechanismus zum Wechseln von Ansichten und Komponenten basierend auf Benutzerinteraktionen oder Änderungen der URL. Die Navigation ermöglicht es den Benutzern, nahtlos zwischen verschiedenen Teilen der App zu wechseln, ohne die Seite zu aktualisieren. Diese clientseitige Navigation hält die App reaktionsschnell und flüssig, während der Status der App erhalten bleibt.
📄️ Route Patterns
Routenmuster werden verwendet, um zu definieren, wie URLs bestimmten Ansichten zugeordnet werden, einschließlich dynamischer und optionaler Segmente, regulärer Ausdrücke und Wildcards. Routenmuster ermöglichen es dem Framework, URLs abzugleichen, Parameter zu extrahieren und URLs dynamisch zu generieren. Sie spielen eine entscheidende Rolle bei der Strukturierung der Navigation und der Komponentendarstellung einer App basierend auf dem Standort des Browsers.
📄️ Query Parameters
Abfrageparameter ermöglichen es Ihnen, zusätzliche Daten über URLs zu übermitteln, und zwar im Format ?key1=value1&key2=value2. Während Routenparameter verwendet werden, um erforderliche Daten innerhalb des URL-Pfads zu übermitteln, bieten Abfrageparameter einen flexiblen Mechanismus zum Übermitteln von optionalen oder zusätzlichen Daten. Sie sind besonders nützlich beim Filtern von Inhalten, Sortieren oder Verarbeiten mehrerer Werte für denselben Schlüssel.
📄️ State Management
Creating seamless, dynamic Benutzererfahrungen erfordert oft, dass der Zustand Ihrer Webanwendung in der URL reflektiert und über Browser-Navigationsevents hinweg beibehalten wird. Dies können Sie erreichen, ohne die Seite neu zu laden, indem Sie URL-Parameteraktualisierungen und die Verwaltung des Browser-Verlaufs nutzen. Dies stellt sicher, dass Benutzer spezifische Ansichten teilen, als Lesezeichen speichern oder zurückkehren können, während die App sich ihrer vorherigen Interaktionen voll bewusst ist.
🗃️ Navigationslebenszyklus
3 Elemente
🗃️ Routenhierarchie
3 Elemente
📄️ Navigational Frame Titles
In webforJ werden alle Routen innerhalb eines Frames gerendert, der als oberster Container fungiert und dafür verantwortlich ist, den Inhalt der aktuellen Route anzuzeigen. Wenn Benutzer zwischen verschiedenen Routen navigieren, wird der Titel des Frames dynamisch aktualisiert, um die aktive Ansicht widerzuspiegeln, was hilft, den aktuellen Standort des Benutzers innerhalb der App klar zu kennzeichnen.
📄️ Routes Registration
Neben der Registrierung von Routen mit den @Route-Anmerkungen ist es möglich, Routen zur Laufzeit dynamisch zu registrieren, zu aktualisieren oder zu entfernen, basierend auf der Anwendungslogik, Benutzerrollen oder anderen Bedingungen. Diese Flexibilität ermöglicht es Ihnen, die Navigation dynamischer zu verwalten, anstatt Routen zur Compile-Zeit statisch zu definieren.
📄️ Route Transitions
Routenübergänge bieten deklarative animierte Übergänge beim Navigieren zwischen Routen. Basierend auf der View Transitions API, ermöglicht es das Hinzufügen der @RouteTransition Annotation zu Ihren Routenkomponenten, dass der Router den Animationslebenszyklus während der Navigation automatisch verwaltet.