# JavaServer Faces

JavaServer Faces (JSF) és un marc de treball per aplicacions web basades en Java que simplifica el desenvolupament d'interfícies d'usuari per a aplicacions Java EE. JSF va utilitzar JavaServer Pages (JSP) com a tecnologia per fer el desplegament de les pàgines (però també podia utilitzar altres tecnologies, com per exemple XUL) però des de l'aparició de la versió 2.0 la tecnologia oficial per representar les pàgines és Facelets tot i que es continua donant suport a les tecnologies anteriors.
Es va començar a desenvolupar el 2001 i la primera versió va sortir el març del 2004. Des de llavors han anat apareixent diferents versions noves que n'han simplificat i millorat el desenvolupament i s'ha acabat convertint en la forma estàndard de crear aplicacions Java EE
JSF està format per tres elements bàsics:
* Un conjunt de components prefabricats per dissenyar entorns d'usuari
* Un model de desenvolupament basat en events. Té tot el codi necessari per gestionar els events que es produeixin en l'aplicació web
* Un model de components que permet desenvolupar components addicionals
En general:
* Proporciona desenvolupament d'interfícies web independents del client basat en components.
* Està pensat per funcionar amb el paradigma MVC (Model-Vista-Controlador)
* Simplifica l'accés i la gestió de les dades des de la web
* Gestiona l'estat de la interfície entre múltiples peticions i clients de forma no intrusiva
* Proporciona un entorn de desenvolupament amigable per molts desenvolupadors amb suport per Ajax

## Objectius

Una de les idees principals consisteix a fer que les interfícies web no es desenvolupin a partir del codi HTML sinó a través de components. El fet d'estar basat en components li permet treballar a més alt nivell que no pas quan es fa directament en HTML. Permet, per exemple, que es pugui afegir a l'aplicació web un component anomenat "taula" i treballar-hi a alt nivell en comptes d'haver d'afegir manualment les etiquetes de taula, fila i columna de HTML. Això permet, teòricament, alliberar als dissenyadors de la necessitat de conèixer HTML per dissenyar les pàgines web.
Aquests objectius de disseny representen el focus de desenvolupament de JSF:
* Definir un conjunt simple de classes base de Java per a components de la interfície d'usuari, estat dels components, i esdeveniments d'entrada. Aquestes classes tractaran aspectes del cicle de vida de la interfície d'usuari, manejant l'estat d'un component per al curs de la vida de la seva pàgina.
* Proporcionar un conjunt de components per la interfície d'usuari, incloent-hi els elements estàndards d'HTML per representar un formulari. Aquests components s'obtindran del conjunt bàsic de classes base que es poden utilitzar per definir components nous.
* Proporcionar un model de JavaBeans per a enviar esdeveniments des dels controls de la interfície d'usuari del costat del client a l'aplicació del costat del servidor.
* Definir unes APIs per a la validació d'entrada, incloent-hi suport per a la validació del costat del client.
* Especificar un model per a internacionalització i localització de la interfície d'usuari.
* Automatitzar la generació de sortides apropiades per l'objectiu del client, tenint en compte totes les dades de configuració disponibles del client, com versió del navegador, etc.

## Versions

* JSF 1.0 (2004-03-11) - llançament inicial de les especificacions de JSF.
* JSF 1.1 (2004-05-27) - llançament per arreglar errors. Sense canvis a les especificacions ni al renderkit d'HTML.
* JSF 1.2 (2006-05-11) - Algunes millores en el nucli i incorporació inicial a l'estàndard Java EE 5
* JSF 2.0 (2009-07-01) — Actualització pensada sobretot per facilitar-ne l'ús. Millora el rendiment i les funcions. Coincideix amb Java EE 6. En aquesta versió s'adopta la tecnologia Facelets que permet abandonar la dependència de JSP.
* JSF 2.1 (2010-11-22) — Versió de manteniment de la versió 2.0. S'hi introdueixen pocs canvis
* JSF 2.2 (2013-05-21) — Introdueix nous conceptes com vistes sense estat, flux de pàgines i la possibilitat de crear contractes de recursos

## Implementacions

Hi ha diverses implementacions de l'estàndard, cosa que sobre el paper afavoreix que qui faci servir JSF no quedi en mans de cap desenvolupador, però les més importants són.
* Mojarra JavaServer Pages Arxivat 2014-05-30 a Wayback Machine.. Implementació de l'estàndard desenvolupat per Oracle Corporation
* MyFaces projecte de la Apache Software Foundation.
JavaServer Pages forma part de l'estàndard Java EE de manera que si es treballa amb un servidor d'aplicacions compatible amb Java EE (Oracle GlassFish, Wildfly, etc..) aquest ja en portarà una implementació.
En cas de treballar amb un contenidor de Servlets, com Apache Tomcat, abans de poder usar l'aplicació web caldrà aconseguir-ne alguna de les implementacions i afegir-la al contenidor (normalment n'hi ha prou amb afegir-hi un o més arxius JAR)

## Components

Un avantatge addicional del funcionament basat en components està en el fet que es poden reutilitzar els components desenvolupats i fins i tot fer servir components desenvolupats per altres persones. Això ha fet que hagin aparegut diverses llibreries de components:
* Primefaces: Llibreria de codi obert basada en JQuery pensada per ser lleugera. Aporta més de 150 components
* JBoss RichFaces: Afegeix components visuals i suport per AJAX
* ICEFaces: Desenvolupats per l'empresa ICESoft. Aporta més d'un centenar de components enriquits
* OpenFaces Arxivat 2010-01-21 a Wayback Machine.: Components de codi obert que s'ofereixen amb una llicència dual
* Apache Tomahawk Arxivat 2014-05-28 a Wayback Machine.: Conjunt de components creats per l'equip de MyFaces abans que el projecte passés a formar part de la fundació Apache. Forma part del projecte Apache MyFaces
* Apache Trinidad Arxivat 2010-04-13 a Wayback Machine.: Conjunt de components donats per Oracle Corporation, on es coneixia com a ADF Faces. Forma part del projecte Apache MyFaces
* Apache Tobago: Conjunt de components pensats per ser usat en aplicacions empresarials. Forma part del projecte Apache MyFaces

## Vegeu també

* Interfície d'usuari

## Referències

* ↑ «JSF 1.0 i 1.1».
* ↑ «JSF 1.2».
* ↑ «JSF 2.1 i 2.0».
* ↑ «JSF 2.1 i JSF 2.0».
* ↑ «JSF 2.2».
* ↑ «Java EE 7 Tutorial Chapter 7: JavaServer Faces Technology». Arxivat de l'original el 2013-06-15. [Consulta: 12 juny 2014].

## Enllaços externs

* JavaServer Faces - Lloc web oficial