JSF es un framework para aplicaciones Java que simplifica el desarrollo de interfaces de usuario en aplicaciones JEE. JSF busca que el desarrollo de aplicaciones web sea tan sencillo como aplicaciones autónomas mediante capas de abstracción que independizan el código de protocolos subyacentes como HTTP. JSF también permite utilizar una gran variedad de librerías de componentes gráficos más allá de los estándares HTML.
2. ¿Qué es JSF?
Java Web
JSF es un Framework para aplicaciones Java, que simplifica el desarrollo
de interfaces de usuarios en aplicaciones JEE.
La gran ventaja de JSF 2.0 respecto a los frameworks que han salido
anteriormente, es que JSF busca que el desarrollo de aplicaciones WEB
sea tan sencillo como el desarrollo de aplicaciones "StandAlone",
agregando capas de abstracción para independizar nuestro código de los
protocolos subyacentes como el HTTPRequest o el PortletRequest etc.
Además de esto, gracias a tecnologías como Ajax, y a la forma como JSF
está diseñado, podemos utilizar una gran cantidad de librerías gráficas
(diferentes tipos de componentes gráficos), más allá de los estandard
definidos por HTML.
3. Implementaciones JSF I
Java Web
Un error muy común al utilizar JSF es confundir las implementaciones con las librerías
gráficas.
Algunas implementaciones de la especificación JSF son:
- Mojarra (RI - Reference Implemenation)
- Apache MyFaces.
Para dar mayor interactividad y vistosidad a nuestras páginas podemos hacer uso de
librerías de componentes gráficos cómo PrimeFaces, IceFaces, RichFaces, etc. pero
estas librerías siempre necesitarán como dependencia una implementación de la
especificación de JSF.
De esto podemos concluir que la especificación JSF está compuesta por:
- Una API para representar componentes y manejar su estado, manejar eventos, realizar
validaciones en el servidor, conversión de datos, definición de navegación, soporte para
internacionalización y accesabilidad. Además de proveer extensibilidad a cada una de estas
características.
- Custom Tags (Tags personalizados), para permitir añadir componentes a las páginas Webs.
4. Implementaciones JSF II
Java Web
ORACLE Mojarra
- Corre en cualquier server que de soporte a Servlets 2.5 o posteriores
- Totalmente integrado con Glassfish 3
Apache MyFaces
- Corre en cualquier server que de soporte a Servlets 2.5 o posteriores
- Totalmente integrado con Apache Geronimo 3
Cualquier Java EE 6 Server
- JSF 2.0 es parte oficial de java EE 6
- Soportado por Jboss 6, Weblogic 11, WebSphere 8, entre otros.
6. Scope
Java Web
- RequestScope: Declarado mediante la annotation @RequestScoped. Se va a crear una nueva instancia
del bean para cada petición HTTP que se lleve a cabo. De manera que el ciclo de vida del bean comienza
cuando se ejecuta la petición al servidor y finaliza cuando se devuelve la respuesta al usuario.
- SessionScope: Indicado a través de la annotation @SessionScoped. Este tipo de scope colocará el bean
en la sesión, de manera que el ciclo de vida del bean comienza cuando un usuario abre una sesión, hasta
que la misma termina.
- ApplicationScope: Se declara mediante la annotation @ApplicationScoped. El bean será almacenado
durante todo el ciclo de vida de la aplicación web. El mismo será instanciado con la primera petición que
se realice a la aplicación web y va a desaparecer cuando la aplicación web sea quitada del servidor. Este
tipo de beans son compartidos por todas las sesiones y requests que existan sobre la aplicación.
- ViewScope: Indicado mediante la annotation @ViewScoped, es uno de los scopes que se agregan en la
versión 2 de JSF. La vida del bean dura desde que se muestra una página JSF al usuario hasta que éste
navega hacia otra página diferente. Este tipo de scope es muy útil al momento de manejar páginas que
utilizan AJAX.
- NoneScope: Indicado a través de la annotation @NoneScoped, este tipo de scope se utiliza para indicar
que un bean será referenciado por otro bean. Por lo cual, este tipo de beans, son instanciados cuando el
bean que los referencia, lo invoca por primera vez y, serán eliminados cuando el bean que los invocó ya
no los necesite.
- A partir de JSF 2, se puede declarar este tipo de scope mediante la annotation @CustomScoped
(value=”#{unMapa}”). Lo que nos permite esto, es definir el tiempo de vida que deseamos se mantenga la
instancia del bean. En un Map, se asocia el bean, con ese tiempo que hemos definido nosotros.
7. Conceptos
Java Web
- Managed Bean (o Backing Bean). Es un pojo que se asocia con los componentes de la
interfaz de usuario (UIComponent), dentro de sus funciones están:
- Almacenar referencias a los componentes de la vista y ponerlos a la disposición del
controller (durante el ciclo de vida JSF).
- Proveer de las propiedades necesarias para la vista, como el comportamiento de la pantalla,
la información que se presenta e inclusive hasta algunos elementos del diseño gráfico.
- Exponer los métodos que pueden ser usados por los componentes para comunicar al
servidor de la iteracción con el usuario.
- Binding, es el acceso programático a los componentes de la vista, mismos que heredan del
árbol jerárquico de componentes con la raíz UIviewroot.
- Convertidores, son parte de la vista y es un proceso que transforma una cadena del lado de
la vista a un tipo de dato Java en el lado del servidor y así mismo de regreso.
- Validaciones, son usadas para validar los datos de los componentes de acuerdo al uso de la
vista o las reglas de negocio.
- Method expressions, son usados para comunicar eventos de la vista al modelo de
presentación como ActionEvent, ValueChangeEvent, PhaseEvente. Soportan invocaciones
arbitrarias a métodos públicos del managed bean.
9. Ciclo de vida II
Java Web
JSF tiene 6 fases:
1. Restore View – Crea o restaura la página anterior.
2. Apply Request Values – Cada componente extrae su valor del request y lo
almacena como un String temporal.
3. Process Validations – Cada componente es convertido y validado.
4. Update Model Values – Cada componente es recorrido y actualiza el modelo
(Backing bean).
5. Invoke Application – Ejecuta los “actionListeners” y los “actions”.
6. Render Response – Devuelve el “response”.
Si se pone “immediate=true”, se salta las fases 3-5. Esto se suele usar para los
botones cancelar de los formularios, ya que no quieres forzar que los valores
introducidos sean correctos si estas cancelando la acción
Si se pone “bypassUpdates=true”, se salta las fases 4-5, las validaciones se
ejecutan. Un ejemplo es un botón que valida si el email introducido no existe ya
como nombre de usuario. No se quiere guardar el valor y hacer el submit del
formulario, solo se quieren ejecutar las validaciones. Presente en algunos
Frameworks