Svantaggi di JSF 2.0? Onestamente, a parte la curva di apprendimento ripida relativa quando non si dispone di solide conoscenze di base sullo sviluppo Web di base (HTML / CSS / JS, lato server rispetto lato client, ecc.) E l' API Servlet Java di base (richiesta / risposta / sessione , inoltro / reindirizzamento, ecc.), non vengono in mente svantaggi gravi. JSF nella sua versione attuale ha ancora bisogno di sbarazzarsi dell'immagine negativa che ha acquisito durante i primi anni, durante i quali c'erano diversi svantaggi gravi.
JSF 1.0 (marzo 2004)
Questa era la versione iniziale. È stato ingombro di bug sia nel core che nelle aree delle prestazioni che non vuoi conoscere. La tua applicazione web non ha sempre funzionato come ti aspetteresti intuitivamente. Come sviluppatore scapperesti via piangendo.
JSF 1.1 (maggio 2004)
Questa è stata la versione bugfix. Le prestazioni non erano ancora molto migliorate. C'era anche uno svantaggio principale: non è possibile incorporare perfettamente HTML nella pagina JSF. Tutto il semplice HTML vanilla viene reso prima dell'albero dei componenti JSF. Devi avvolgere tutta la semplice vaniglia nei <f:verbatim>
tag in modo che vengano inclusi nell'albero dei componenti JSF. Sebbene questo fosse secondo le specifiche, questo ha ricevuto molte critiche. Vedi anche ao JSF / Facelets: perché non è una buona idea mescolare JSF / Facelets con tag HTML?
JSF 1.2 (maggio 2006)
Questa è stata la prima versione del nuovo team di sviluppo JSF guidato da Ryan Lubke. Il nuovo team ha svolto un ottimo lavoro. Ci sono stati anche cambiamenti nelle specifiche. Il principale cambiamento è stato il miglioramento della gestione della vista. Questo non solo ha rimosso completamente JSF da JSP, quindi si potrebbe usare una tecnologia di visualizzazione diversa da JSP, ma ha anche permesso agli sviluppatori di incorporare un semplice HTML vanilla nella pagina JSF senza problemi con i <f:verbatim>
tag. Un altro importante obiettivo del nuovo team è stato il miglioramento delle prestazioni. Durante la vita della Sun JSF Reference Implementation 1.2 (che è stato chiamato in codice Mojarra dalla build 1.2_08, intorno al 2008), praticamente ogni build è stata spedita con (maggiori) miglioramenti delle prestazioni accanto ai soliti (minori) bugfix.
L'unico grave svantaggio di JSF 1.x (incluso 1.2) è la mancanza di un ambito tra l'ambito della richiesta e della sessione , il cosiddetto ambito della conversazione . Ciò ha costretto gli sviluppatori a seccarsi con elementi di input nascosti, query DB non necessarie e / o abusare dell'ambito della sessione ogni volta che si desidera conservare i dati del modello iniziale nella richiesta successiva al fine di elaborare correttamente convalide, conversioni, modifiche al modello e invocazioni di azioni in più applicazioni web complesse. Il dolore potrebbe essere attenuato adottando una libreria di terze parti che conserva i dati necessari nella richiesta successiva come il componente MyFaces Tomahawk <t:saveState>
, l' ambito di conversazione JBoss Seam e MyFaces Orchestra quadro di conversazione.
Un altro svantaggio per i puristi HTML / CSS è che JSF utilizza i due punti :
come carattere separatore ID per garantire l'univocità dell'elemento id
HTML nell'output HTML generato, in particolare quando un componente viene riutilizzato più volte nella vista (template, componenti iteranti, ecc.) . Poiché questo è un personaggio illegale negli identificatori CSS, dovresti usare il \
per sfuggire ai due punti nei selettori CSS, risultando in selettori brutti e bizzarri come #formId\:fieldId {}
o addirittura #formId\3A fieldId {}
. Vedi anche Come utilizzare l'ID elemento HTML generato da JSF con i due punti ":" nei selettori CSS? Tuttavia, se non sei un purista, leggi anche Per impostazione predefinita, JSF genera ID inutilizzabili, che sono incompatibili con la parte CSS degli standard Web .
Inoltre, JSF 1.x non è stato fornito con strutture Ajax fuori dalla scatola. In realtà non è uno svantaggio tecnico, ma a causa della campagna pubblicitaria Web 2.0 durante quel periodo, è diventato uno svantaggio funzionale. Exadel ha introdotto in anticipo Ajax4jsf, che è stato completamente sviluppato nel corso degli anni ed è diventato la parte principale della libreria di componenti JBoss RichFaces . Anche altre librerie di componenti sono state fornite con poteri Ajax incorporati, il noto è ICEfaces .
Circa a metà della vita di JSF 1.2, è stata introdotta una nuova tecnologia di visualizzazione basata su XML: Facelets . Ciò ha offerto enormi vantaggi rispetto a JSP, in particolare nel settore dei modelli.
JSF 2.0 (giugno 2009)
Questa è stata la seconda versione principale, con Ajax come parola d'ordine. Ci sono stati molti cambiamenti tecnici e funzionali. JSP è sostituito da Facelets come tecnologia di visualizzazione predefinita e Facelets è stato ampliato con funzionalità per creare componenti personalizzati utilizzando XML puro (i cosiddetti componenti compositi ). Vedi anche Perché Facelets è preferito su JSP come linguaggio di definizione della vista da JSF2.0 in poi?
I poteri Ajax sono stati introdotti nel sapore del <f:ajax>
componente che ha molte somiglianze con Ajax4jsf. Annotazioni e miglioramenti della convenzione sulla configurazione sono stati introdotti per eliminare il faces-config.xml
più possibile il file dettagliato . Inoltre, il carattere di separazione ID contenitore contenitore di denominazione predefinito è :
diventato configurabile, in modo che i puristi HTML / CSS possano respirare sollevati. Tutto quello che devi fare è definirlo come init-param
nel web.xml
nome javax.faces.SEPARATOR_CHAR
e assicurarti di non utilizzare il personaggio da solo in nessun punto dell'ID cliente, come ad esempio -
.
Ultimo ma non meno importante, è stato introdotto un nuovo ambito, l' ambito della vista . Ha eliminato un altro grave svantaggio di JSF 1.x come descritto in precedenza. È sufficiente dichiarare il bean @ViewScoped
per abilitare l'ambito della conversazione senza complicare tutti i modi per conservare i dati nelle successive richieste (conversazionali). Un @ViewScoped
bean rimarrà attivo fintanto che successivamente invii e navighi nella stessa vista (indipendentemente dalla scheda / finestra del browser aperta!), In modo sincrono o asincrono (Ajax). Vedi anche Differenza tra ambito View e Request nei bean gestiti e Come scegliere l'ambito bean giusto?
Sebbene praticamente tutti gli svantaggi di JSF 1.x siano stati eliminati, ci sono bug specifici di JSF 2.0 che potrebbero diventare uno spettacolo. Il @ViewScoped
fallisce nei gestori dei tag a causa di un problema di pollo uova nel risparmio dello stato parziale. Questo problema è stato risolto in JSF 2.2 e backportato in Mojarra 2.1.18. Anche il passaggio di attributi personalizzati come HTML5data-xxx
non è supportato. Questo problema è stato risolto in JSF 2.2 dalla nuova funzione passthrough elements / Attributes. Inoltre l'implementazione di JSF Mojarra ha una sua serie di problemi . Relativamente molti di questi sono legati al comportamento<ui:repeat>
a volte non intuitivo di , la nuova implementazione di risparmio parziale dello stato e l' ambito flash mal implementato . La maggior parte di essi è stata risolta in una versione Mojarra 2.2.x.
Intorno al periodo JSF 2.0, è stato introdotto PrimeFaces , basato sull'interfaccia utente di jQuery e jQuery. È diventata la libreria di componenti JSF più popolare.
JSF 2.2 (maggio 2013)
Con l'introduzione di JSF 2.2, HTML5 è stato usato come parola d'ordine anche se tecnicamente era supportato solo in tutte le versioni precedenti di JSF. Vedi anche JavaServer Faces 2.2 e supporto HTML5, perché viene ancora utilizzato XHTML . La nuova funzionalità più importante di JSF 2.2 è il supporto per gli attributi dei componenti personalizzati, aprendo così un mondo di possibilità, come i gruppi di pulsanti di opzione personalizzati senza tablatura .
A parte i bug specifici dell'implementazione e alcune "piccole cose fastidiose" come l'incapacità di iniettare un bean in un validatore / convertitore (già risolto in JSF 2.3), non ci sono davvero svantaggi nella specifica JSF 2.2.
MVC basato su componenti vs MVC basato su richiesta
Alcuni potrebbero ritenere che il principale svantaggio di JSF sia che consente un controllo molto limitato sul HTML / CSS / JS generato. Non è di proprietà di JSF, solo perché è un framework MVC basato su componenti , non un framework MVC basato su richiesta (azione) . Se un alto grado di controllo di HTML / CSS / JS è il tuo requisito principale quando si considera un framework MVC, allora non dovresti già guardare a un framework MVC basato su componenti, ma a un framework MVC basato su richiesta come Spring MVC . Devi solo tener conto del fatto che dovrai scrivere tu stesso tutto quel codice HTML / CSS / JS. Vedi anche Differenza tra MVC richiesta e MVC componente .
Guarda anche: