Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java EE 7 Grundkurs

FacesFlow

Testen Sie unsere 2018 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Das JSF-Framework verfügt mit FacesFlow über ein komplett neues Konzept. Dieses erlaubt es, in sich abgeschlossene Assistenten und Wizards umzusetzen, wobei Informationen ausschließlich für den Zeitraum eines Flow-Durchlaufs vorgehalten werden.

Transkript

Eine neue Funktionalität in der Java EE 7 in Bezug auf JSF ist Faces Flow. Wir werden uns in diesem Video anschauen, was Faces Flow darstellt, wie es funktioniert und wir werden Schritt für Schritt ein kleines Beispiel dazu durchgehen. Die Idee hinter Faces Flow ist es, eine Art Wizard- oder Assistentenfunktionalität anzubieten. Der Gedanke ist ebenfalls der, wie bei einem Wizard oder Assistenten, dass Variablen bzw. Beans am Ende des Tages, also nach Abarbeiten des Wizards oder Assistenten, nicht mehr existieren. Das heißt, es gibt einen gemeinsamen Gültigkeitsbereich von Beans, der nach Abschluss des Flows dann auch seine Wirksamkeit verliert. Ein Flow hat definierte Ein- und Aussprungpunkte. Generell basiert der Flow-Ansatz auf Konventionen. Flows befinden sich immer in einem Ordner. Dieser Ordner ist benannt wie der Flow selber. Flows haben immer mindestens genau einen View, und der Start-View heißt genauso, wie der Flow selbst. Flows werden immer per commandLink-oder per commandButton-Element gestartet. Nach dem Starten eines Flows ist der gemeinsame Gültigkeitsbereich aktiviert. Dieser gemeinsame Gültigkeitsbereich kann auf Ebene von Beans mit der FlowScoped-Annotation ausgedrückt werden. Flows können im Code oder deklarativ notiert werden. Wir werden uns hier mit dem deklarativen Ansatz auseinandersetzen. Und Flows können wiederverwendet werden. Das bedeutet, sie können in JAR-Archiven verpackt sein und können dann anderen Applikationen ebenfalls zur Verfügung gestellt werden. Flows haben eine eigene Konfigurationsdatei. Diese Konfigurationsdatei heißt genauso wie der Flow und verfügt über das Suffix config. Das heißt, wenn der Flow flow1 heißt, heißt die Konfigurationsdatei flow1-config.xml. Die Konfiguration ist das Standard-Faces-Konfigurationsformat. Das heißt, so eine Datei sieht im Grunde so aus, wie in diesem Beispiel. Es gibt da drin eine flow-definition und innerhalb dieser flow-definition gibt es ein flow-return Element. Und dieses flow-return Element definiert was nach der Ausführung des Flows für eine Adresse angesprungen wird. Das kann dann per impliziter oder expliziter Navigation passieren. Wenn Sie mit dem Faces Flow arbeiten, dann sollten Sie wie gesagt wissen, dass die FlowScoped Beans nach der Ausführung des Flows verworfen sind. Der Gültigkeitsbereich von diesen Beans ist somit also weiter als das bei RequestScoped der Fall ist. RequestScoped bedeutet ja, dass die Bean nach Abarbeitung der aktuellen Anforderung verfällt. Und er ist enger als SessionScoped. SessionScoped bedeutet ja, dass die Bean eine ganze Weile aktiv bleibt, nämlich solange wie der Benutzer aktiv mit der Seite arbeitet. Flows können von außen Parameter übergeben werden. Sie können ihrerseits untergeordnete Flows starten. Das Konzept von Flows beruht, wie gesagt, auf dem Gedanken eines Wizards oder eines Assistenten, in dem Schritt für Schritt gearbeitet wird. Sehen wir uns dies einmal in Aktion an. Wir befinden uns hier innerhalb einer JSF Applikation. Es gibt im unteren Bereich der Seite einen Link, Registrierung starten. Dieser Link wird die aktuelle Seite verlassen und den Flow zur Registrierung starten. Wir klicken einmal darauf, und wir sind jetzt in dem Registrierungsflow. Hier können wir ein paar Daten angeben. Ein Kick auf den Button Weiter führt uns auf die nächste Seite. Hier können wir die AGB bestätigen. Wir können aber auch zurück kommen zur ersten Seite. Die Daten bleiben hier weiter eingegeben, die Ausnahme ist das Kennwort-Feld. Dies wird ja über die JSF inputSecret Komponente realisiert und die vergisst die Werte, die dort eingegeben worden sind. Das heißt, wir müssen das Kennwort noch mal eingeben. Trotzdem bleibt das Geschlecht weiterhin ausgewählt und der eigegebene Benutzername existiert ebenfalls. Ebenfalls sind die AGBs weiterhin akzeptiert. Ein Klick auf Weiter führt uns auf den letzten Schritt des Flows, bei dem wir die Registrierung abschließen können und die eingegebenen Daten noch einmal sehen können. Auch hier kommen wir immer zurück auf den oder die vorherigen Schritte. Ein Klick auf Beenden wird diesen Benutzer anlegen und den Flow abschließen. Sehen wir uns nun einmal an, wie dies im Code umgesetzt ist. Lassen Sie uns zunächst einmal schauen, wo und wie der Flow selbst definiert ist. Im Wurzelverzeichnis der Web-Applikation, also innerhalb von Web-Content, gibt es einen Ordner Register. In diesem Ordner befindet sich der Flow. Wenn wir dort hineinschauen, dann sehen wir eine Konfigurationsdatei, die heißt genauso wie der Flow. Also register-flow.xml. Ebenfalls gibt es hier eine Startseite, die heißt ebenfalls so wie der Flow, nämlich register.xml. Das ist die erste Seite, die automatisch aufgerufen wird. Hier drin befinden sich ganz normale JSF Komponenten. Die weiteren Seiten dieses Flows arbeiten dann letztlich ebenfalls mit normalen JSF Komponenten und sind gebunden jeweils an eine Bean. Diese Bean befindet sich in einem speziellen Package und heißt RegisterBean. Ganz wesentlich bei dieser Bean ist, dass wir hier oben die FlowScoped Annotation haben. Diese FlowScoped Annotation samt ihres Parameters besagt, für welchen Flow ist diese Bean zuständig, nämlich für den RegisterFlow. Ebenfalls gibt es hier einen RegisterController, der ist ebenfalls FlowScoped. Beide Beans haben die Named-Annotationen, können also aus der JSF-Seite heraus per Expression Language angesprochen werden. Ansonsten gibt es bei dieser RegisterBean gar nichts weiter zu beachten. Es sind ein paar Felder darin enthalten und ein paar Getter und Setter. Im RegisterController findet am Ende die Verarbeitung statt und zwar gibt es hier eine Methode flowReturnValue. Die legt einen neuen User an, gibt die Daten, die der Benutzer eingegeben hat, in diese neue User-Instanz hinein, registriert den Benutzer und gibt danach die Rückgabe register_done zurück. Schauen wir einfach in die Konfiguration. In der Konfiguration dieses Flows befindet sich ein Bereich Flow Definition. Hier drin ist wieder ein Element definiert, nämlich register und das heißt wieder genauso wie der Flow. Auch hier drin ist definiert, dass es eine Done-Regel gibt. Und diese Done-Regel wird entgegengenommen von dem Outcome der Methode flowReturnValue. Das ist nötig, diese Registrierung, damit der Flow wirklich nur über gezielt definierte Methoden verlassen werden kann. In der globalen faces-config.xml Datei gibt es nun noch ein Handling. Und zwar eine Navigationsregel, die auf register achtet und dort das Outcome register_done entgegen nimmt und die zeigt dann wieder auf eine andere View weiter. Ganz wesentlich in diesem Beispiel war und ist, dass der Flow in sich selbst geschlossen ist. Wir rufen aus der Seite, von der aus der Flow gestartet werden soll auch per commandLink letztlich nur eine Aktion auf, die genauso wie der Flow heißt. Das heißt, die Konvention ist, der Flow liegt in einem Verzeichnis mit einem bestimmten Namen, in diesem Verzeichnis gibt es eine Konfiguration, die so heißt wie der Flow und es gibt eine Datei, die so heißt wie der Flow. Wenn diese Bedingungen erledigt sind, dann können wir auch mit FlowScoped Variablen arbeiten und haben ein in sich geschlossenes System. Sobald dieser Flow abgeschlossen ist, sind die Werte, die eingegeben wurden, verfallen. Letztlich ist es nicht besonders schwierig im JSF-Umfled mit Faces Flows zu arbeiten. Diese bieten sich speziell für Assistenten oder schrittweise Vorgehensweisen an. Sie können diese einfach implementieren, denn die interne Implementierung der einzelnen JSF-Seiten ist ganz normal. Hier gibt es keine Abweichungen zu normalen JSF-Komponenten. Auch die Beans, die verwendet werden, sind ganz normale Beans. Der einzige Unterschied besteht in der FlowScoped Annotation. Letztlich sind Flows somit ein einfacher und leicht zu implementierender Mechanismus. Ob er eine weite Verbreitung findet, obliegt dem einzelnen Entwickler. Es gibt durchaus Szenarien, in denen man Faces Flows sinnvoll einsetzen kann.

Java EE 7 Grundkurs

Lernen Sie die Grundlagen der Programmierung mit Java EE 7 verstehen und anwenden.

6 Std. 4 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!