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

Java EE 7: Geschäftsanwendungen

Managed Bean für die View-Ebene definieren, Teil 1: Kundendatensatz

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Managed Beans erlauben es, JSF-Anzeigekomponenten um Logik zu erweitern – sie können Daten bereitstellen oder Operationen darauf ausführen. Hier implementieren Sie eine Managed Bean, die einen Kunden repräsentiert und Kundenverwaltung ermöglicht.

Transkript

JSF-Seiten sind dumm und das sollen sie auch sein. Denn sie sollen ja möglichst wenig eigene Logik mitbringen. Die Logik steckt in so genannten Managed Beans. In diesem Video werden wir uns mit der Definition einer Managed Bean, die einen Kundendatensatz repräsentiert und dort zusätzliche Operationen darauf bereitstellt, befassen. Und wir werden uns einmal damit auseinandersetzen, was überhaupt der Gedanke hinter diesem Managed Beans ist. Der Grundansatz beim MVC ist, dass es für eine oder mehrere Seiten Managed Beans also Controller-Komponenten gibt. So eine Managed Bean repräsentiert dabei den Zustand der Seite, sie stellt Operationen bereit und sie kapselt optional einen oder mehrere Datensätze. Damit wir so eine Managed Bean benutzen können, müssen wir sie etwas spezifisch definieren und zwar muss sie sich in einem sogenannten Scope befinden, also in einem Gültigkeitsbereich. Der Gültigkeitsbereich kann beispielsweise RequestScoped sein. RequestScoped bedeutet, die Bean ist gültig für genau diese eine Anforderung. ViewScoped bedeutet, dass die Bean oder die Instanz dieser Bean für eine bestimmte Kombination aus Parametern und Seitenarmen gültig ist. Und solange die unverändert bleiben, ist doch die selbe Instanz im Einsatz. ApplicationScoped meint, das Ganze ist auf die Applikation selber gescoped, das bedeutet, diese Bean gibt es genau einmal. Dann gibt es noch weitere Scopes, mit den man arbeiten kann, beispielsweise SessionScoped, aber das sind die wichtigsten, mit den man sich auseinandersetzen sollte. Managed Beans sollten darüber hinaus benannt sein, sonst werden sie nämlich einfach von der JSF-Seite nicht erkannt und das machen wir mit Hilfe der Named-Annotation. So eine Managed Bean kann dann Operationen bereitstellen und diese Operationen können genutzt werden um die Seite navigieren zu lassen, zu einer anderen Seite. Und das Ganze geschieht mit Hilfe von Navigationsregeln und da gibt es Explizite und Implizite Navigationsregeln Implizite Navigationsregeln schauen dabei nach der Rückgabe einer Aktion. Wenn ein passendes Facelet gefunden wird, also eine Seite, wird diese eingebunden. Das macht man zum Beispiel mit so einem Command Button wir haben ja hier eine action-Angabe mit dem Wert login und der zeigt halt dann auf einer Seite mit dem Namen login.xhtml. Das Ganze kann man auch mit EL-Ausdrücken ausdrücken. Das bedeutet wir können das an Methoden binden per Expression Language und dann die Rückgabe dieser Methode auswerten lassen. Wir können ebenfalls aus einer Methode heraus so genannte Redirects machen. Das ist letztlich nichts anderes als eine Rückgabe, also eine Zeichenkette, ein Text, der als implizierte Navigationsregeln aufgefasst wird und wenn dort der Parameter faces-redirect=true steht, dann wird nicht einfach nur die neue Seite eingebunden und angezeigt, sondern es findet wirklich ein klassischer Redirect statt. Das bedeutet der Client wird dorthin geschickt, dementsprechend ändert sich die Adresszeile und dabei können wir dann noch zusätzliche Parameter mit übergeben, um beispielsweise Datensätze zu identifizieren. Wir werden nun den folgenden eine Managed Bean anlegen, die einen Kundensatz repräsentiert und dann zusätzliche Operationen darauf bereitstellt. Diese Managed Bean wird den Namen CustomerBean haben und sie befindet sich im Package com.cm.web.beans, ihre Aufgabe ist es einen Kundendatensatz zu repräsentieren. Sie implementiert das Interface Serializable und wir stellen natürlich auch die VersionID bereit. So, intern hält diese Managed Bean ein Customer-Datensatz und sie hält darüber hinaus noch ein Integer Wert, der diesen Customer-Datensatz repräsentiert und von außen gesetzt werden kann. Darüber hinaus hält sie noch eine Liste vom Typ AddressBean, die also letztlich die Adressen dieses Kunden repräsentiert und zwar in Form von einer ArrayList vom Typ AddressBean und sie hält eine Liste vom Typ CommunicationBean, die die Kommunikationseinstellungen des Kunden repräsentiert. Weiterhin lassen wir uns hier das CustomerDAO initiieren, um nämlich ein Kundendatensatz laden zu können. Die Inition findet mit Hilfe der EJB-Annotation statt. Nun definieren wir zunächst einmal eine Methode, die wir nutzen können, um ein Kundendatensatz laden zu lassen. Das Ganze soll allerdings nur geschehen, wenn wir noch gar keinen Kundendatensatz haben, deswegen fragen wir das zunächst ab. Und das Ganze kann nur geschehen wenn CustomerID ein Wert größer Null hat. Dieser Wert wird wie gesagt von außen rein übergeben und dann laden wir halt unsere Customer-Instanz aus dem CustomerDAO unter Angabe der CustomerID. Sollte kein Kundendatensatz geladen worden sein, dann legen wir eine neue Kundeninstanz an und wir lassen alle Adressen, die der Kunde schon hat, egal ob neu angelegt oder bereits geladen, in die Adressauflistung, die wir lokal definiert haben, überführen. Genau dasselbe machen wir für die Kommunikationsdatensätze und wir repräsentieren sie stets in Form der FrontendBeans, also der lokalen Repräsentation, die uns zusätzliche Funktionalitäten bereit stellen. Das Gegenstück zum Laden ist zu speichern. Wenn wir einen Kunden hier im Frontend mit Hilfe von AddressBean zum CommunicationBeans repräsentieren, müssen wir diese Informationen später in den eigentlichen Kundendatensatz wieder zurück schreiben. Dies machen wir mit Hilfe der Methode prepareCustomer, hier löschen wir alle Daten, die sich bereits im Kunden befinden für die Adressen und lesen alle AddressBean Istanzen aus dieser Adressenauflistung, die wir gerade eben definiert haben, aus und holen uns dort die eigentlichen Adressdatensätze und weisen sie dem Kunden wieder zu. Nehmen wir dasselbe, machen wir für die Kommunikationsanträge. Wie gesagt, Hintergrund ist der, dass wir im Frontend diese AddressBean und CommunicationBean Instanzen benutzen, da wieder zusätzlich Informationen haben. Nur die sind im Backend nicht bekannt und die kann ich natürlich auch einem Customer nicht zuweisen. Also muss ich das machen, bevor ich Datensätze speichern oder neu anlegen kann. Bevor wir die eigentlichen Operationen, die mit einem Kunden möglich sind, implementieren können, sollten wir zunächst einmal drei Navigationsziele definieren. Das machen wir mit Konstanten Variablen outcome_index verweist auf die Startseite unserer Applikation, outcome_updated verweist auf die Detailseite unserer Applikation und outcome_deleted verweist ebenfalls auf die Startseite. Wir haben es allerdings in Form einer extra Variablen definiert, um später einfache Änderung vornehmen zu können, so dass irgendwann nötig sein sollte. Die erste Operation die man mit einem Kundendatensatz vornehmen sollte, ist die Create-Operation, damit wird ein neuer Kundendatensatz angelegt. Hier rufen wir zunächst die bereits gerade eben implementierte Methode prepareCustomer auf. Danach legen wir den Datensatz in der Datenbank an und geben als Rückgabe das Outcome-Index zurück. Das bedeutet wir lassen auf die Startseite zurückleiten. Wenn wir einen Kunden abdecken möchten, dann verwenden wie die Update Methode. Auch hier wird der Datensatz zunächst einmal so vorbereitet, dass er speicher- beziehungsweise updatebar ist, danach wird er upgedatet. Und hier gehen wir auf die Detailseite zurück und lassen dabei die ID des Datensatzes in die Zeichenkette mit aufnehmen. Die letzte Operation ist das Löschen. Bei dieser wird kein Kundendatensatz vorbereitet, sondern wir löschen einfach den Datensatz und leiten danach auf die entsprechende Seite wieder zurück. Dann haben wir noch zwei weitere Operationen, die wir im Frontend anbieten wollen. Wir wollen nämlich die Möglichkeiten bereitstellen, dass Adressen hinzugefügt beziehungsweise gelöscht werden können und dass Kommunikationseinträge hinzugefügt beziehungsweise gelöscht werden können. Auch das implementieren wir hier, weil zu diesen Zwecken in die jeweiligen Listen neue Datensätze angefügt werden müssen. Umgesetzt wird das Ganze mit Hilfe der Methoden addAddress und addCommunication, die jeweils einen Datensatz neu anlegen und ihn in den Editmodus versetzen. Auf der einen Seite ist es eine Art respin-Instanz auf der anderen Seite eine CommunicationBean Instanz und dann der jeweiligen Listen hinzufügen. Und es gibt die beiden Methoden removeAddress und removeCommunication, deren Aufgabe darin besteht aus den Listen jeweils den übergeben Datensatz zu entfernen. Nun müssen wir zuletzt nur noch unsere Getter und Setter generieren lassen. Und das machen wir für Adressen, Communications, den Customer und die CustomerID, lassen uns die entsprechenden Felder beziehungsweise Methoden generieren und haben nun unsere CustomerBean fertig implementiert. Wir haben hier nun also Methoden drin, mit denen wir den kompletten Lebenszyklus eines Customers abbilden können. Wir können ihn anlegen, wir können ihn ändern, wir können ihn löschen und das Ganze machen wir wie gesagt mit Hilfe von Frontend Repräsentationen für Adressen und für Kommunikationseinträge. Nun fehlt lediglich noch eine Kleinigkeit wir müssen diese Managed Bean als eine Managed Bean bekannt machen. Zu diesem Zweck annotieren wir sie mit der ViewScoped-Annotation aus dem javax.faces.view Package. Das ist nämlich die Version für Java EE 7 und wir verwenden die Named-Annotation aus dem javax.inject Package und wir nennen diese Bean Customers. In diesem Video haben wir eine Managed Bean implementiert, die ViewScoped ist und auf den Namen Customers hört. Und diese Managed Bean verfügt über Methoden, die den kompletten Lebenszyklus eines Kunden abbilden. Wir lassen da drin Repräsentation unserer FrontendBeans erzeugen beziehungsweise vorhalten und können die so erzeugte Managed Bean inklusive all ihre Funktionalitäten nunmehr vom Frontend ausnutzen und ansprechen.

Java EE 7: Geschäftsanwendungen

Verfolgen Sie, wie eine komplette Business-Applikation unter dem Einsatz des gesamten Java-Enterprise-Techologiestacks ensteht.

5 Std. 2 min (39 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!