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/john
würde dieUserProfileView
-Komponente rendern. - Der
id
-Parameter würdejohn
aus 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 tiefes Linking wählen. Um Routing zu aktivieren, muss die @Routify-Annotation auf der Ebene einer Klasse angewendet werden, die App implementiert. Dies gewährt webforJ die Befugnis, den Browserverlauf zu verwalten, auf Navigationsevents zu reagieren und die Komponenten der App 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 Benutzeraktionen oder URL-Änderungen. Die Navigation ermöglicht es Benutzern, nahtlos zwischen verschiedenen Teilen der Anwendung zu wechseln, ohne die Seite zu aktualisieren. Diese clientseitige Navigation hält die Anwendung responsiv und reibungslos, während der Zustand der Anwendung 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 user experiences often requires that the state of your web app be reflected in the URL and retained across browser navigation events. You can achieve this without reloading the page by leveraging URL-Parameteraktualisierungen und das Management des Browserverlaufs. This ensures that users can share, bookmark, or return to specific views with the app fully aware of their prior interactions.
🗃️ Navigationslebenszyklus
3 Elemente
🗃️ Routenhierarchie
3 Elemente
📄️ Navigational Frame Titles
In webforJ werden alle Routen innerhalb eines Frames gerendert, der als oberster Container dient und dafür verantwortlich ist, den Inhalt der aktuellen Route anzuzeigen. Während die Benutzer zwischen verschiedenen Routen navigieren, wird der Frame-Titel dynamisch aktualisiert, um die aktive Ansicht widerzuspiegeln, was dabei hilft, den Benutzern einen klaren Kontext über ihren aktuellen Standort innerhalb der App zu bieten.
📄️ Routes Registration
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.