Какие компоненты являются MVC в структуре JSF MVC?

Ответы:

150

Это зависит от точки зрения (каламбур).

В большой архитектурной картине ваш собственный код JSF - это V :

M - Бизнес-домен / Уровень услуг (например, EJB / JPA / DAO)
V - Ваш код JSF
C - FacesServlet

На изображении разработчика архитектурный V , в свою очередь, можно разделить, как показано ниже:

M - Сущность
V - Facelets / страница JSP
C - Управляемый компонент

На меньшем изображении клиента разработчик V , в свою очередь, делится, как показано ниже:

M - Дерево компонентов JSF
V - Визуализированный вывод HTML
C - Клиент (веб-браузер)

На еще меньшей картинке JavaScript клиент V , в свою очередь, можно разделить, как показано ниже:

M - Дерево HTML DOM
V - Визуальное представление
C - Функции прослушивателя событий (взаимодействие с конечным пользователем и Ajax)

Так что это в основном M (M (M (MVC) C) C) C;)

Обратите внимание, что некоторые начальные и даже некоторые - очень простые - учебные пособия смешивают / копируют / выравнивают свойства объекта в управляемом компоненте, что фактически делает контроллер моделью. Излишне говорить, что это плохой дизайн (т.е. не чистый дизайн MVC).

Фрагменты кода в следующих ответах иллюстрируют правильный подход MVC:

В книге «Полное руководство по JSF в Java EE 8» , в главе 8 «Поддерживающие компоненты», стр. 276, приведенная ниже диаграмма Венна используется для иллюстрации положения поддерживающего bean-компонента в парадигме MVC в контексте, имеющем отношение к разработчику JSF. . Отказ от авторских прав: книга написана мной, а изображение создано мной.

введите описание изображения здесь

BalusC
источник
+1 Полностью согласен с обеими философиями, в основном это больше касается большой арки. просматривать проекты в реальном времени.
Джигар Джоши
2
не понял каламбура, все еще есть поддержка
Ник Расслер
@JeffLee на моей работе, мы видим это как управляемые бины, управляющие представлением xhtml. Управляемые компоненты могут взаимодействовать с кодом модели для получения и сохранения сущностей в зависимости от того, что нужно представлению.
djeikyb
5
@Jeff: это только если вы смешиваете в нем свойства модели. Например, использование <h:inputText value="#{register.username}">вместо <h:inputText value="#{register.user.name}">.
BalusC
Полностью согласен с таким ответом в ущерб ответу @Jigar. ИМО, управляемые бины - это гораздо больше, чем модель. Они являются своего рода расширением FacesServlet, где происходит все взаимодействие. Также они могут удерживать состояние, но гораздо больше C, чем M.
Xtreme Biker
36

M Одел будет вашManagedBean

V IEW бы jsp, XHTML(ну вы можете разместить различные виды здесь)

C ontroller будетFacesServlet

Обновите, надеюсь, эта картинка поможет больше

введите описание изображения здесь

Джигар Джоши
источник
4
+1, имеет смысл, хотя я бы сказал, что ваша Модель - это Сущности (если они у вас есть), а Контроллер - это Управляемые Бины (в дополнение к FacesServlet)
Шервин Асгари
@Jigar ну, если FacesServletэто контроллер, то я не могу его расширить. У меня не может быть собственных контроллеров ... Я согласен с Шервином, что Managed Beans - это контроллер. Шервин, как насчет того, чтобы опубликовать свой собственный альтернативный ответ?
yegor256
1
это тайное прикрытие, FacesServletкоторое контролирует.
Джигар Джоши,
@Jigar википедия говорит , что «Контроллер принимает входные данные от пользователя и инструктирует модель и видовой экран для выполнения действий на основе этих входных данных.» Сомневаюсь, что FacesServlet «инструктирует модель»?
yegor256
4
Undercover FacesServlet получает все данные (на верхнем уровне он называется bean) из запроса, сеанса, контекста приложения и обрабатывает их.
Джигар Джоши
4

Сервлет Faces управляет жизненным циклом лиц, поэтому в этом смысле это контроллер, объединенный с вашим собственным кодом, который может вызываться на каждой фазе жизненного цикла.

http://www.java-samples.com/images/jsf-lifecycle.gif

Дон
источник
-1

Java Server Faces - это веб-фреймворк MVC, в котором компоненты MVC следующие:

  1. Модель - это управляемый класс bean-компонента, аннотированный с помощью @ManagedBean, который имеет свойства для хранения данных и соответствующих методов получения и установки. Класс управляемого bean-компонента также может содержать бизнес-логику. Они также известны как вспомогательные bean-компоненты, которые могут иметь разные области действия, такие как запрос, сеанс, приложение.

  2. Просмотр - пользовательский интерфейс, показываемый клиенту, т.е. файлы .xhtml. Он получает данные от управляемых bean-компонентов и отображает их в качестве ответа.

  3. Контроллер - javax.servlet.webapp.FacesServlet - это класс централизованного контроллера, который по сути является сервлетом. Любой запрос, поступающий в JSF, сначала отправляется контроллеру FacesServlet. В отличие от JSP, в котором мы пишем наш собственный класс контроллера, в JSF сервлет контроллера является фиксированной частью инфраструктуры, и мы не пишем его.

Поток MVC

введите описание изображения здесь

Хетал Рах
источник
Это идентично вопросу, за который проголосовали 36 человек. Если вы думаете, что этот ответ может быть более ясным, пожалуйста, отредактируйте его
Kukeltje
@Kukeltje Я считаю, что мой ответ имеет больше объяснений, а не просто названия компонентов MVC.
Hetal Rachh
Еще очень немного объяснений ... 1: не совсем так, поскольку «содержать данные» - не самое лучшее (должно быть в сущностях), бизнес-логика, не самое лучшее, поскольку они должны быть в сервисах (см. Дополнительные ссылки в ответе, получившем наибольшее количество голосов) ), 2: не намного больше 3: немного больше текста, но отсутствует изображение другого ответа, который делает более понятным, чем текст, который вы добавили ...
Kukeltje
@Kukeltje Спасибо, но я только новичок в JSF.
Hetal Rachh
Нет проблем. Пользуюсь им уже давно и с большим успехом. Получите в свои руки книгу по java ee 8 и jsf Бауке Шольца и Арьяна Тиймса. Отличное чтение и руководство, но также прочитайте все> 25 вопросов / ответов, за которые проголосовали в Stackoverflow, помните об их существовании и начните с jsf 2.3 и
Kukeltje