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


+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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.