Welche Komponenten enthält MVC im JSF MVC Framework?

Antworten:

150

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.

Geben Sie hier die Bildbeschreibung ein

BalusC
quelle
+1 Stimme beiden Philosophien voll und ganz zu, im Allgemeinen ist es eher bei Big Arch der Fall. Ansicht in Echtzeitprojekten.
Jigar Joshi
2
habe das Wortspiel nicht verstanden, habe immer noch einen Upvoat
Nick Russler
@ JeffLee bei meiner Arbeit sehen wir es als die verwalteten Beans die xhtml-Ansicht steuern. Verwaltete Beans können mit dem Modellcode kommunizieren, um Entitäten abzurufen und zu speichern, je nachdem, was die Ansicht benötigt.
Djeikyb
5
@ Jeff: Es ist das nur, wenn Sie die Modelleigenschaften darin mischen. Wie in, <h:inputText value="#{register.username}">anstelle von <h:inputText value="#{register.user.name}">.
BalusC
Stimmen Sie dieser Antwort zum Nachteil von @ Jigars völlig zu. IMO, Managed Beans sind viel mehr als ein Modell. Sie sind eine Art Erweiterung des FacesServlet, in dem die gesamte Interaktion stattfindet. Auch sie sind in der Lage, Zustand zu halten, aber viel mehr ein C als ein M.
Xtreme Biker
36

M odel wäre deinManagedBean

V iew wäre jsp, XHTML(gut können Sie verschiedene Ansichten hier unterbringen)

C ontroller wird seinFacesServlet

Update, hoffe dieses Bild hilft mehr

Geben Sie hier die Bildbeschreibung ein

Jigar Joshi
quelle
4
+1, macht Sinn, obwohl ich vielleicht sagen würde, dass Ihr Modell die Entitäten sind (falls Sie welche haben) und der Controller die verwalteten Bohnen sind (zusätzlich zum FacesServlet)
Shervin Asgari
@Jigar gut, wenn FacesServletes 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?
yegor256
1
Es ist Undercover, FacesServletdas kontrolliert.
Jigar Joshi
@Jigar wikipedia sagt: "Ein Controller akzeptiert Eingaben vom Benutzer und weist das Modell und das Ansichtsfenster an, Aktionen basierend auf diesen Eingaben auszuführen." Ich bezweifle, dass FacesServlet "das Modell anweist", oder?
yegor256
4
Undercover FacesServlet empfängt alle Daten (auf der obigen Ebene wird sie als Bean bezeichnet) aus Anforderung, Sitzung, Anwendungskontext und verarbeitet sie.
Jigar Joshi
-1

Java Server Faces ist ein MVC-Webframework, bei dem die MVC-Komponenten wie folgt lauten:

  1. 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.

  2. Ansicht - Die dem Client angezeigte Benutzeroberfläche, dh .xhtml-Dateien. Es ruft die Daten von den verwalteten Beans ab und wird als Antwort gerendert.

  3. 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-

Geben Sie hier die Bildbeschreibung ein

Hetal Rachh
quelle
Dies ist identisch mit der 36 positiv bewerteten Frage. Wenn Sie der Meinung sind, dass diese Antwort klarer
formuliert werden
@Kukeltje Ich glaube, meine Antwort enthält mehr Erklärungen als nur die MVC-Komponenten zu benennen.
Hetal Rachh
Sehr wenig mehr Erklärung ... 1: Nicht wirklich, da "Daten enthalten" nicht das Beste ist (sollte in Entitäten sein), Geschäftslogik, nicht das Beste, da diese in Diensten sein sollten (siehe die zusätzlichen Links in der am besten bewerteten Antwort ), 2: nicht viel mehr 3: etwas mehr Text, aber das Bild der anderen Antwort fehlt, was klarer ist als der Text, den Sie hinzugefügt haben ...
Kukeltje
@Kukeltje Danke, aber ich bin nur ein Anfänger von JSF.
Hetal Rachh
Kein Problem. Ich benutze es schon lange mit großem Erfolg. Holen Sie sich das Java EE 8 und JSF Buch von Bauke Scholtz und Arjan Thijms. Tolles Lesen und Tutorial, aber auch lesen Sie alle> 25 hochgestuften Q / A in Stackoverflow. Erinnern Sie sich an ihre Existenz und beginnen Sie mit jsf 2.3 und
Kukeltje