Какие компоненты являются 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. . Отказ от авторских прав: книга написана мной, а изображение создано мной.

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


+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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.