Quels composants sont MVC dans le cadre JSF MVC?


Réponses:


150

Cela dépend du point de vue (jeu de mots intentionnel).

Dans la grande image architecturale, votre propre code JSF est le V :

M - Domaine d'activité / Couche de service (par exemple EJB / JPA / DAO)
V - Votre code JSF
C - FacesServlet

Dans l'image du développeur, le V architectural est à son tour divisible comme ci-dessous:

M - Entité
V - Facelets / page JSP
C - Bean géré

Dans l'image plus petite du client, le développeur V est à son tour divisible comme ci-dessous:

M - Arborescence des composants JSF
V - Sortie HTML rendue
C - Client (navigateur Web)

Dans l'image JavaScript encore plus petite, le client V est à son tour divisible comme ci-dessous:

M - Arbre DOM HTML
V - Présentation visuelle
C - Fonctions d'écouteur d'événements (interaction de l'utilisateur final et Ajax)

Donc c'est fondamentalement un M (M (M (MVC) C) C) C;)

Notez que certains démarreurs et même certains tutoriels - très basiques - mêlent / copient / aplatissent les propriétés de l'entité dans le bean géré, ce qui ferait effectivement du contrôleur un modèle. Inutile de dire que c'est une mauvaise conception (c'est-à-dire pas une conception MVC propre).

Les extraits de code dans les réponses suivantes illustrent la bonne approche MVC:

Dans le livre The Definitive Guide to JSF in Java EE 8 , au chapitre 8 «Backing beans», page 276, le diagramme de Venn ci-dessous est utilisé pour illustrer la position du backing bean dans le paradigme MVC dans le contexte pertinent pour le développeur JSF . Avis de non-responsabilité du droit d'auteur: le livre est écrit par moi et l'image est créée par moi.

entrez la description de l'image ici


+1 Tout à fait d'accord avec les deux philosophies, généralement c'est plus le cas avec une grande arche. voir les projets en temps réel.
Jigar Joshi

2
je n'ai pas compris le jeu de mots, j'ai encore un upvoat
Nick Russler

@JeffLee à mon travail, nous le voyons comme les beans gérés contrôlent la vue xhtml. Les beans gérés peuvent communiquer avec le code du modèle pour obtenir et enregistrer des entités en fonction des besoins de la vue.
djeikyb

5
@Jeff: ce n'est que si vous y mêlez les propriétés du modèle. Comme dans, en utilisant <h:inputText value="#{register.username}">au lieu de <h:inputText value="#{register.user.name}">.
BalusC

Tout à fait d'accord avec cette réponse au détriment de celle de @ Jigar. OMI, les beans gérés sont bien plus qu'un modèle. Ils sont en quelque sorte une extension du FacesServlet, où toute l'interaction se produit. En outre, ils sont capables de tenir l'état, mais beaucoup plus un C plutôt qu'un M.
Xtreme Biker

36

M odel serait votreManagedBean

V iew serait jsp, XHTML(eh bien, vous pouvez accueillir différentes vues ici)

Le contrôleur seraFacesServlet

Mettre à jour, j'espère que cette image vous aidera davantage

entrez la description de l'image ici


4
+1, cela a du sens, même si je dirais peut-être que votre modèle est les entités (si vous en avez) et que le contrôleur est les haricots gérés (en plus du FacesServlet)
Shervin Asgari

@Jigar eh bien, si FacesServletc'est un contrôleur que je ne peux pas l'étendre. Je ne peux pas avoir mes propres contrôleurs ... Je suis d'accord avec Shervin pour dire que Managed Beans est le contrôleur. Shervin, que diriez-vous de publier votre propre réponse alternative?
yegor256

1
c'est l'infiltration FacesServletqui contrôle.
Jigar Joshi

@Jigar wikipedia dit que "Un contrôleur accepte les entrées de l'utilisateur et ordonne au modèle et à la fenêtre d'effectuer des actions basées sur cette entrée." Je doute que FacesServlet "instruise le modèle", n'est-ce pas?
yegor256

4
Undercover FacesServlet reçoit toutes les données (au niveau de la couche ci-dessus, il est appelé bean) de la demande, de la session, du contexte d'application et les traite.
Jigar Joshi


-1

Java Server Faces est un framework Web MVC où les composants MVC sont les suivants,

  1. Modèle - Il s'agit de la classe de bean géré annotée avec @ManagedBean, qui possède des propriétés pour contenir les données et les getters et setters respectifs. La classe de bean géré peut également contenir la logique métier. Ils sont également appelés backing beans qui peuvent avoir différentes étendues telles que request, session, application.

  2. Afficher - L'interface utilisateur présentée au client, c'est-à-dire les fichiers .xhtml. Il obtient les données des beans gérés et il est rendu en tant que réponse.

  3. Controller - javax.servlet.webapp.FacesServlet est la classe de contrôleur centralisée qui est essentiellement un servlet. Toute demande adressée au JSF est d'abord envoyée au contrôleur FacesServlet. Contrairement à la JSP dans laquelle nous écrivons notre propre classe de contrôleur, dans JSF, le servlet de contrôleur est une partie fixe du framework et nous ne l'écrivons pas.

Flux MVC-

entrez la description de l'image ici


C'est identique à la question à 36 votes positifs. Si vous pensez que cette réponse peut être clarifiée, veuillez la modifier
Kukeltje

@Kukeltje Je pense que ma réponse a plus d'explications que de simplement nommer les composants MVC.
Hetal Rachh

Très peu d'explications supplémentaires ... 1: pas vraiment car `` contenir des données '' n'est pas la meilleure chose (devrait être dans les entités), businesslogic, pas la meilleure chose car elles devraient être dans les services (voir les liens supplémentaires dans la réponse la plus votée) ), 2: pas beaucoup plus 3: un peu plus de texte mais il manque l'image de l'autre réponse qui rend plus claire que le texte que vous avez ajouté ...
Kukeltje

@Kukeltje Merci mais je ne suis qu'un débutant à JSF.
Hetal Rachh

Aucun problème. Je l'utilise depuis longtemps maintenant avec beaucoup de succès. Mettez la main sur le livre java ee 8 et jsf de Bauke Scholtz et Arjan Thijms. Bonne lecture et tutoriel, mais aussi tout lire> 25 questions / réponses votées pour Stackoverflow se souviennent de leur existence et commencent avec jsf 2.3 et
Kukeltje
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.