¿Qué componentes son MVC en el marco JSF MVC?

Respuestas:

150

Esto depende del punto de vista (juego de palabras).

En el panorama arquitectónico grande, su propio código JSF es el V :

M : dominio comercial / capa de servicio (por ejemplo, EJB / JPA / DAO)
V : su código JSF
C : FacesServlet

En la imagen del desarrollador, la V arquitectónica a su vez se puede dividir de la siguiente manera:

M - Entidad
V - Facelets / JSP página
C - Bean administrado

En la imagen del cliente más pequeña, el desarrollador V es a su vez divisible como se muestra a continuación:

M - Árbol de componentes JSF
V - Salida HTML renderizada
C - Cliente (navegador web)

En la imagen de JavaScript aún más pequeña, el cliente V es a su vez divisible como se muestra a continuación:

M - Árbol DOM HTML
V - Presentación visual
C - Funciones de escucha de eventos (interacción del usuario final y Ajax)

Entonces es básicamente una M (M (M (MVC) C) C) C;)

Tenga en cuenta que algunos principiantes e incluso algunos tutoriales —muy básicos— mezclan / copian / aplanan las propiedades de la entidad en el bean administrado, lo que efectivamente haría del controlador un modelo. No hace falta decir que este es un diseño deficiente (es decir, no un diseño MVC limpio).

Los fragmentos de código en las siguientes respuestas ilustran el enfoque MVC correcto:

En el libro The Definitive Guide to JSF in Java EE 8 , en el capítulo 8 "Backing beans", página 276, el siguiente diagrama de Venn se utiliza para ilustrar la posición del backing bean en el paradigma MVC dentro del contexto relevante para el desarrollador JSF. . Descargo de responsabilidad de derechos de autor: el libro está escrito por mí y la imagen es creada por mí.

ingrese la descripción de la imagen aquí

BalusC
fuente
+1 Totalmente de acuerdo con ambas filosofías, generalmente es más el caso con arco grande. ver en tiempo real proyectos.
Jigar Joshi
2
no entendí el juego de palabras, todavía tengo un optimismo
Nick Russler
@JeffLee en mi trabajo, lo vemos como los beans administrados controlan la vista xhtml. Los beans administrados pueden comunicarse con el código del modelo para obtener y guardar entidades según lo que necesite la vista.
djeikyb
5
@Jeff: es eso solo si mezcla las propiedades del modelo en él. Como en, usar en <h:inputText value="#{register.username}">lugar de <h:inputText value="#{register.user.name}">.
BalusC
Totalmente de acuerdo con esta respuesta en detrimento de la de @ Jigar. En mi opinión, los beans gestionados son mucho más que un modelo. Son una especie de extensión de FacesServlet, donde ocurre toda la interacción. También son capaces de mantener el estado, pero mucho más una C que una M.
Xtreme Biker
36

M odel sería tuManagedBean

La vista sería jsp, XHTML(bueno, puede acomodar varias vistas aquí)

C ontroller seráFacesServlet

Actualización, espero que esta imagen ayude más

ingrese la descripción de la imagen aquí

Jigar Joshi
fuente
4
+1, tiene sentido, aunque tal vez diría que su modelo son las entidades (si tiene alguna) y el controlador son los frijoles administrados (además de FacesServlet)
Shervin Asgari
@Jigar bueno, si FacesServletes un controlador, no puedo extenderlo. No puedo tener mis propios controladores ... Estoy de acuerdo con Shervin en que Managed Beans es el controlador. Shervin, ¿qué tal si publicas tu propia respuesta alternativa?
yegor256
1
es encubierto el FacesServletque controla.
Jigar Joshi
@Jigar wikipedia dice que "Un controlador acepta la entrada del usuario e indica al modelo y la ventana gráfica que realicen acciones basadas en esa entrada". Dudo que FacesServlet "instruya al modelo", ¿verdad?
yegor256
4
Undercover FacesServlet recibe todos los datos (en la capa superior se llama bean) de la solicitud, la sesión, el contexto de la aplicación y los procesa.
Jigar Joshi
-1

Java Server Faces es un marco web MVC donde los componentes MVC son los siguientes,

  1. Modelo : es la clase de bean administrada anotada con @ManagedBean, que tiene propiedades para contener los datos y los respectivos getters y setters. La clase de bean administrado también puede contener la lógica empresarial, también conocidos como beans de respaldo, que pueden tener diferentes ámbitos como solicitud, sesión, aplicación.

  2. Ver : la interfaz de usuario que se muestra al cliente, es decir, archivos .xhtml. Obtiene los datos de los beans administrados y se procesa como respuesta.

  3. Controlador : javax.servlet.webapp.FacesServlet es la clase de controlador centralizado que es básicamente un servlet. Cualquier solicitud que llegue al JSF primero va al controlador FacesServlet. A diferencia del JSP en el que escribimos nuestra propia clase de controlador, en JSF el servlet controlador es una parte fija del marco y no lo escribimos.

Flujo MVC

ingrese la descripción de la imagen aquí

Hetal Rachh
fuente
Esto es idéntico a la pregunta 36 votada a favor. Si cree que la respuesta puede ser más clara, edítela
Kukeltje
@Kukeltje Creo que mi respuesta tiene más explicación en lugar de solo nombrar los componentes de MVC.
Hetal Rachh
Muy poca explicación más ... 1: no realmente, ya que 'contener datos' no es lo mejor (debería estar en las entidades), lógica de negocios, no es lo mejor ya que estos deberían estar en los servicios (consulte los enlaces adicionales en la respuesta más votada ), 2: no mucho más 3: un poco más de texto pero falta la imagen de la otra respuesta, lo que deja más claro que el texto que agregó ...
Kukeltje
@Kukeltje Gracias, pero solo soy un principiante en JSF.
Hetal Rachh
No hay problema. Lo he estado usando durante mucho tiempo con gran éxito. Ponga sus manos en el libro java ee 8 y jsf de Bauke Scholtz y Arjan Thijms. Excelente lectura y tutorial, pero también lea todos> 25 Q / A con voto positivo en Stackoverflow, recuerde su existencia y comience con jsf 2.3 y
Kukeltje