Wer ist im JSF MVC-Framework Model, View und Controller?
quelle
Wer ist im JSF MVC-Framework Model, View und Controller?
Dies hängt von der Sichtweise ab (Wortspiel beabsichtigt).
Im großen Architekturbild ist Ihr eigener JSF-Code das V :
M - Geschäftsdomäne / Serviceschicht (z. B. EJB / JPA / DAO)
V - Ihr JSF-Code
C - FacesServlet
Im Entwicklerbild ist das architektonische V wiederum wie folgt teilbar:
M - Entität
V - Facelets / JSP Seite
C - Verwaltete Bean
Im kleineren Client-Bild ist der Entwickler V wiederum wie folgt teilbar:
M - JSF-Komponentenbaum
V - Gerenderte HTML-Ausgabe
C - Client (Webbrowser)
In dem noch kleineren JavaScript-Bild ist der Client V wiederum wie folgt teilbar:
M - HTML-DOM-Baum
V - Visuelle Präsentation
C - Ereignis-Listener-Funktionen (Endbenutzerinteraktion und Ajax)
Es ist also im Grunde ein M (M (M (MVC) C) C) C;)
Beachten Sie, dass einige Starter und sogar einige - sehr grundlegende - Tutorials die Eigenschaften der Entität in der verwalteten Bean mischen / kopieren / reduzieren, wodurch der Controller effektiv zu einem Modell wird. Unnötig zu erwähnen, dass dies ein schlechtes Design ist (dh kein sauberes MVC-Design).
Die Codefragmente in den folgenden Antworten veranschaulichen den richtigen MVC-Ansatz:
In dem Buch The Definitive Guide to JSF in Java EE 8 , in Kapitel 8 "Backing Beans", Seite 276, wird das folgende Venn-Diagramm verwendet, um die Position der Backing Bean im MVC-Paradigma innerhalb des für den JSF-Entwickler relevanten Kontexts zu veranschaulichen . Copyright-Haftungsausschluss: Das Buch wurde von mir geschrieben und das Bild wurde von mir erstellt.
<h:inputText value="#{register.username}">
anstelle von<h:inputText value="#{register.user.name}">
.M odel wäre dein
ManagedBean
V iew wäre
jsp
,XHTML
(gut können Sie verschiedene Ansichten hier unterbringen)C ontroller wird sein
FacesServlet
Update, hoffe dieses Bild hilft mehr
quelle
FacesServlet
es sich um einen Controller handelt, kann ich ihn nicht erweitern. Ich kann keine eigenen Controller haben ... Ich würde Shervin zustimmen, dass Managed Beans Controller ist. Shervin, wie wäre es mit einer eigenen alternativen Antwort?FacesServlet
das kontrolliert.Das Gesichtsservlet verwaltet den Gesichtslebenszyklus. In diesem Sinne kann der Controller in Kombination mit Ihrem eigenen Code während jeder Lebenszyklusphase aufgerufen werden
http://www.java-samples.com/images/jsf-lifecycle.gif
quelle
Java Server Faces ist ein MVC-Webframework, bei dem die MVC-Komponenten wie folgt lauten:
Modell - Dies ist die mit @ManagedBean annotierte verwaltete Bean-Klasse, die Eigenschaften zum Speichern der Daten und der jeweiligen Getter und Setter enthält. Die verwaltete Bean-Klasse kann auch die Geschäftslogik enthalten. Diese werden auch als Backing-Beans bezeichnet, die unterschiedliche Bereiche wie Anforderung, Sitzung und Anwendung haben können.
Ansicht - Die dem Client angezeigte Benutzeroberfläche, dh .xhtml-Dateien. Es ruft die Daten von den verwalteten Beans ab und wird als Antwort gerendert.
Controller - javax.servlet.webapp.FacesServlet ist die zentralisierte Controller-Klasse, bei der es sich im Grunde um ein Servlet handelt. Jede Anfrage, die an die JSF geht, geht zuerst an den FacesServlet-Controller. Im Gegensatz zu der JSP, in der wir unsere eigene Controller-Klasse schreiben, ist das Controller-Servlet in JSF ein fester Bestandteil des Frameworks und wir schreiben es nicht.
MVC flow-
quelle