Jakie komponenty są MVC w frameworku JSF MVC?

Odpowiedzi:

150

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.

wprowadź opis obrazu tutaj

BalusC
źródło
+1 Całkowicie zgadzam się z obiema filozofiami, generalnie jest to bardziej w przypadku dużego łuku. podgląd w projektach w czasie rzeczywistym.
Jigar Joshi
2
nie dostałem gry słów, nadal mam upvoat
Nick Russler,
@JeffLee w mojej pracy, widzimy, że zarządzane fasole kontrolują widok xhtml. Zarządzane komponenty bean mogą komunikować się z kodem modelu, aby pobrać i zapisać jednostki w zależności od potrzeb widoku.
djeikyb
5
@Jeff: dzieje się tak tylko wtedy, gdy połączysz w nim właściwości modelu. Jak w przypadku używania <h:inputText value="#{register.username}">zamiast <h:inputText value="#{register.user.name}">.
BalusC
Całkowicie zgadzam się z tą odpowiedzią ze szkodą dla odpowiedzi @ Jigara. IMO, zarządzana fasola to znacznie więcej niż model. Są rodzajem rozszerzenia serwletu FacesServlet, w którym zachodzi cała interakcja. Są również w stanie utrzymać stan, ale znacznie bardziej C niż M.
Xtreme Biker
36

M odel byłby TwoimManagedBean

V iew byłoby jsp, XHTML(dobrze można pomieścić różne widoki tutaj)

C ontroller będzieFacesServlet

Zaktualizuj, mam nadzieję, że to zdjęcie pomoże bardziej

wprowadź opis obrazu tutaj

Jigar Joshi
źródło
4
+1, Ma sens, chociaż może powiedziałbym, że twoim modelem są jednostki (jeśli je masz), a kontrolerem jest zarządzana fasola (oprócz serwletu FacesServlet)
Shervin Asgari,
@Jigar cóż, jeśli FacesServletjest 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?
yegor256
1
to jest tajny, FacesServletktóry kontroluje.
Jigar Joshi
@Jigar wikipedia mówi, że „Kontroler przyjmuje dane wejściowe od użytkownika i nakazuje modelowi i rzutni wykonanie działań na podstawie tych danych”. Wątpię, czy FacesServlet „instruuje model”, prawda?
yegor256
4
Undercover FacesServlet odbiera wszystkie dane (na wyższej warstwie nazywa się to bean) z żądania, sesji, kontekstu aplikacji i przetwarza je.
Jigar Joshi
-1

Java Server Faces to platforma internetowa MVC, w której składniki MVC są następujące:

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

  2. Widok - interfejs użytkownika wyświetlany klientowi, tj. Pliki .xhtml. Pobiera dane z zarządzanych komponentów bean i są renderowane jako odpowiedź.

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

wprowadź opis obrazu tutaj

Hetal Rachh
źródło
Jest to identyczne z 36 głosowanymi pytaniami. Jeśli uważasz, że odpowiedź może być bardziej jasna, edytuj ją
Kukeltje
@Kukeltje Uważam, że moja odpowiedź ma więcej wyjaśnień niż tylko nazwanie komponentów MVC.
Hetal Rachh
Niewiele więcej wyjaśnień ... 1: niezupełnie, ponieważ `` zawierające dane '' nie jest najlepszą rzeczą (powinno być w jednostkach), logika biznesu, nie najlepsza, ponieważ powinny znajdować się w usługach (zobacz dodatkowe linki w najbardziej opiniowanej odpowiedzi ), 2: niewiele więcej 3: trochę więcej tekstu, ale brakuje obrazu drugiej odpowiedzi, która jest bardziej zrozumiała niż tekst, który dodałeś ...
Kukeltje
@Kukeltje Dzięki, ale dopiero zaczynam przygodę z JSF.
Hetal Rachh
Nie ma problemu. Używam go już od dłuższego czasu z wielkim sukcesem. Zdobądź książkę java ee 8 i jsf autorstwa Bauke Scholtz i Arjan Thijms. Świetna lektura i samouczek, ale także przeczytanie wszystkich> 25 pozytywnych pytań / odpowiedzi w Stackoverflow pamiętaj o ich istnieniu i zacznij od jsf 2.3 i
Kukeltje