Quali componenti sono MVC nel framework JSF MVC?


Risposte:


150

Questo dipende dal punto di vista (gioco di parole).

Nella grande immagine architettonica, il tuo codice JSF è il V :

M - Dominio aziendale / Livello di servizio (ad esempio EJB / JPA / DAO)
V - Il tuo codice JSF
C - FacesServlet

Nell'immagine dello sviluppatore, la V architettonica è a sua volta divisibile come di seguito:

M - Entità
V - Pagina Facelets / JSP
C - Bean gestito

Nell'immagine del cliente più piccola, lo sviluppatore V è a sua volta divisibile come di seguito:

M - Albero dei componenti JSF
V - Output HTML renderizzato
C - Client (browser web)

Nell'immagine JavaScript ancora più piccola, il client V è a sua volta divisibile come di seguito:

M - Albero DOM HTML
V - Presentazione visiva
C - Funzioni listener di eventi (interazione con l'utente finale e Ajax)

Quindi è fondamentalmente una M (M (M (MVC) C) C) C;)

Si noti che alcuni principianti e persino alcuni tutorial —molto di base— mescolano / copiano / appiattiscono le proprietà dell'entità nel bean gestito, il che renderebbe effettivamente il controller un modello. Inutile dire che questo è un design scadente (cioè non un design MVC pulito).

Gli snippet di codice nelle risposte seguenti illustrano l'approccio MVC corretto:

Nel libro The Definitive Guide to JSF in Java EE 8 , nel capitolo 8 "Backing bean", pagina 276, il diagramma di Venn sottostante viene utilizzato per illustrare la posizione del backing bean nel paradigma MVC all'interno del contesto rilevante per lo sviluppatore JSF . Dichiarazione di non responsabilità sul copyright: il libro è stato scritto da me e l'immagine è stata creata da me.

inserisci qui la descrizione dell'immagine


+1 Completamente d'accordo con entrambe le filosofie, generalmente è più il caso dell'arco grande. visualizzare in tempo reale i progetti.
Jigar Joshi

2
non ha ottenuto il gioco di parole, ha ancora un rialzo
Nick Russler

@ JeffLee al mio lavoro, lo vediamo come i bean gestiti controllano la visualizzazione xhtml. I bean gestiti possono comunicare con il codice del modello per ottenere e salvare entità a seconda di ciò di cui ha bisogno la vista.
djeikyb

5
@ Jeff: è solo se mescoli le proprietà del modello in esso. Come in, usando <h:inputText value="#{register.username}">invece di <h:inputText value="#{register.user.name}">.
BalusC

Totalmente d'accordo con questa risposta a scapito di quella di @ Jigar. IMO, i fagioli gestiti sono molto più di un modello. Sono una specie di estensione del FacesServlet, dove avviene tutta l'interazione. Inoltre sono in grado di mantenere lo stato, ma molto più una C piuttosto che una M.
Xtreme Biker

36

M odello sarebbe tuoManagedBean

La vista sarebbe jsp, XHTML(beh, puoi ospitare varie viste qui)

C ontroller saràFacesServlet

Aggiorna, spero che questa immagine aiuti di più

inserisci qui la descrizione dell'immagine


4
+1, ha senso, anche se forse direi che il tuo modello è le entità (se ne hai) e il controller è i fagioli gestiti (oltre a FacesServlet)
Shervin Asgari

@ Jigar bene, se FacesServletè un controller di quanto non posso estenderlo. Non posso avere i miei controller ... Concordo con Shervin sul fatto che Managed Beans sia Controller. Shervin, che ne dici di pubblicare la tua risposta alternativa?
yegor256

1
è sotto copertura FacesServletche controlla.
Jigar Joshi

@Jigar wikipedia dice che "Un controller accetta l'input dell'utente e istruisce il modello e il viewport per eseguire azioni basate su quell'input." Dubito che FacesServlet "istruisca il modello", vero?
yegor256

4
Undercover FacesServlet riceve tutti i dati (al livello superiore è chiamato bean) dalla richiesta, dalla sessione, dal contesto dell'applicazione e li elabora.
Jigar Joshi


-1

Java Server Faces è un framework Web MVC in cui i componenti MVC sono i seguenti,

  1. Modello : è la classe bean gestita annotata con @ManagedBean, che ha proprietà per contenere i dati e rispettivi getter e setter. La classe bean gestiti può contenere anche la logica di business, noti anche come backing bean che possono avere ambiti diversi come richiesta, sessione, applicazione.

  2. Visualizza : l'interfaccia utente mostrata al client, ovvero i file .xhtml. Ottiene i dati dai bean gestiti e viene visualizzato come risposta.

  3. Controller : javax.servlet.webapp.FacesServlet è la classe controller centralizzata che è fondamentalmente un servlet. Qualsiasi richiesta che arriva al JSF va prima al controller FacesServlet. A differenza del JSP in cui scriviamo la nostra classe controller, in JSF il servlet del controller è una parte fissa del framework e non lo scriviamo.

Flusso MVC

inserisci qui la descrizione dell'immagine


Questo è identico alla 36 domanda votata. Se pensi che la risposta possa essere più chiara, modificala
Kukeltje

@Kukeltje Credo che la mia risposta abbia più spiegazioni piuttosto che nominare solo i componenti MVC.
Hetal Rachh,

Pochissima spiegazione in più ... 1: non proprio dal momento che 'contenere dati' non è la cosa migliore (dovrebbe essere nelle entità), logica di business, non la cosa migliore poiché questi dovrebbero essere nei servizi (vedere i collegamenti aggiuntivi nella risposta più votata ), 2: non molto di più 3: un po 'più di testo ma manca l'immagine dell'altra risposta che rende più chiara del testo che hai aggiunto ...
Kukeltje

@Kukeltje Grazie ma sono solo un principiante di JSF.
Hetal Rachh,

Nessun problema. Lo uso da molto tempo con grande successo. Metti le mani sul libro java ee 8 e jsf di Bauke Scholtz e Arjan Thijms. Ottima lettura e tutorial, ma leggi anche tutte le> 25 domande / risposte con voti positivi in ​​Stackoverflow, ricorda la loro esistenza e inizia con jsf 2.3 e
Kukeltje
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.