W ramach JSF MVC, kto jest modelem, widokiem i kontrolerem?
źródło
W ramach JSF MVC, kto jest modelem, widokiem i kontrolerem?
To zależy od punktu widzenia (intencja gry słów).
W dużym obrazie architektonicznym Twój własny kod JSF to V :
M - Domena biznesowa / Warstwa usług (np. EJB / JPA / DAO)
V - Twój kod JSF
C - Serwlet FacesServlet
Na zdjęciu dewelopera architektoniczne V jest z kolei podzielne, jak poniżej:
M - Jednostka
V - Facelets / JSP page
C - Managed bean
Na mniejszym obrazie klienta programista V jest z kolei podzielny, jak poniżej:
M - Drzewo komponentów JSF
V - Wyrenderowane wyjście HTML
C - Klient (przeglądarka internetowa)
Na jeszcze mniejszym obrazku JavaScript klient V jest z kolei podzielny, jak poniżej:
M - Drzewo DOM HTML
V - Prezentacja wizualna
C - Funkcje nasłuchiwania zdarzeń (interakcja użytkownika końcowego i Ajax)
Więc jest to w zasadzie M (M (M (MVC) C) C) C;)
Zauważ, że niektóre startery, a nawet niektóre - bardzo podstawowe - samouczki łączą / kopiują / spłaszczają właściwości jednostki w zarządzanym komponencie bean, co skutecznie uczyniłoby kontroler modelem. Nie trzeba dodawać, że jest to kiepski projekt (tj. Nie jest to czysty projekt MVC).
Fragmenty kodu w poniższych odpowiedziach ilustrują właściwe podejście MVC:
W książce The Definitive Guide to JSF in Java EE 8 , w rozdziale 8 „Backing beans”, strona 276, poniższy diagram Venna jest używany do zilustrowania pozycji fasoli podkładowej w paradygmacie MVC w kontekście odpowiednim dla programisty JSF . Zastrzeżenie dotyczące praw autorskich: książka jest napisana przeze mnie, a zdjęcie jest wykonane przeze mnie.
<h:inputText value="#{register.username}">
zamiast<h:inputText value="#{register.user.name}">
.M odel byłby Twoim
ManagedBean
V iew byłoby
jsp
,XHTML
(dobrze można pomieścić różne widoki tutaj)C ontroller będzie
FacesServlet
Zaktualizuj, mam nadzieję, że to zdjęcie pomoże bardziej
źródło
FacesServlet
jest kontrolerem, to nie mogę go rozszerzyć. Nie mogę mieć własnych kontrolerów ... Zgodziłbym się z Shervinem, że Managed Beans to kontroler. Shervin, co powiesz na opublikowanie własnej alternatywnej odpowiedzi?FacesServlet
który kontroluje.Aplet twarzy zarządza cyklem życia twarzy, więc w tym sensie jest to kontroler połączony z własnym kodem, który może zostać wywołany podczas każdej fazy cyklu życia
http://www.java-samples.com/images/jsf-lifecycle.gif
źródło
Java Server Faces to platforma internetowa MVC, w której składniki MVC są następujące:
Model - jest to zarządzana klasa bean z adnotacją @ManagedBean, która ma właściwości do przechowywania danych oraz odpowiednich metod pobierających i ustawiających. Zarządzana klasa bean może również zawierać logikę biznesową. Są one również znane jako zapasowe komponenty bean, które mogą mieć różne zakresy, takie jak żądanie, sesja, aplikacja.
Widok - interfejs użytkownika wyświetlany klientowi, tj. Pliki .xhtml. Pobiera dane z zarządzanych komponentów bean i są renderowane jako odpowiedź.
Kontroler - javax.servlet.webapp.FacesServlet to klasa scentralizowanego kontrolera, która jest w zasadzie serwletem. Każde żądanie, które przychodzi do JSF, najpierw trafia do kontrolera FacesServlet. W przeciwieństwie do JSP, w którym piszemy własną klasę kontrolera, w JSF serwlet kontrolera jest stałą częścią frameworka i nie piszemy go.
Przepływ MVC
źródło