viernes, 13 de diciembre de 2013

Crear un proyecto JSF2 con Eclipse y Tomcat

2 comentarios

JSF2, Instalación y Configuración

Vamos a explicar como crear un proyecto JSF2 desde 0.

Requisitos:

  • Java --> Necesitaremos Java 6 o superior para utilizar Tomcat 7
  • Servidor --> Necesitamos un servidor que soporte servlets 2.5 o superior y además que contenga las librerías de JSF2, cosa que añadiremos manualmente ya que Tomcat no incorpora estas librerías
  • Librerías --> jsf-api.jar y jsf-impl.jar son extricatamente necesarias para utilizar JSF2 en Tomcat
  • Un IDE --> Eclipse 3.6 o superior, ya que desde esta versión tiene incorporado soporte para JSF2

Paso a paso

Una vez instalado Eclipse e integrado Tomcat, pasaremos a la creación del proyecto en sí.

  1. Creamos un nuevo proyecto de tipo Java
    Nuevo proyecto
  2.  Ahora lo configuramos como un proyecto web, para esto hacemos click sobre el y en el menú contextual seleccionamos Configure -> Convert to Faceted Form
  3. Elegimos ahora las facetas del proyecto que se muestran en la imagen siguiente y clickamos en el mensaje señalado para añadir las librerías necesarias:
  4. Si estamos utilizando Tomcat, deberemos añadir la implementación de JSF, para ello clickamos para crear una nueva User Library y añadimos los JARs necesarios, en este caso serían jsf-api.jar y jsf-impl.jar, aunque por comodidad añadiremos también la librería de etiquetas JSTL.
  5. Damos Ok a todo y cerramos las ventanas. Al final debería de quedarnos un proyecto con la siguiente estructura:

Como vemos durante este proceso se habrán generado los ficheros necesarios para configurar cualquier aplicación web JSF, faces-config.xml y web.xml.

El contenido de los mismos se detalla a continuación:
Fichero web.xml con el contenido mínimo para hacer funcionar nuestra aplicación JSF. El PROJECT_STAGE no es necesrio definirlo, pero de esta manera tendremos más información sobre fallos y otros asusntos durante el desarrollo.

  JSF2-inicio
  
    index.jsp
  
  
    Faces Servlet
    javax.faces.webapp.FacesServlet
    1
  
  
    Faces Servlet
    *.jsf
  
  
    javax.faces.PROJECT_STAGEDevelopment


Este fichero faces-config.xml debe estar siempre presente aunque no tenga ningún contenido, como es nuestro caso.




Para probar nuestra aplicación solo nos queda añadir un par de páginas estáticas con algo de contenido y ver que todo funciona correctamente.
Bajo la carpeta WebContent de nuestro proyecto añadimos los siguientes ficheros:

index.jsp
<% response.sendRedirect("hello.jsf"); %>

hello.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">



	Hola Mundo JSF!



	

		

Hola Mundo JSF!

</html>

Ahora solo nos queda desplegar la aplicación en nuestro Tomcat y usar cualquier navegador para acceder a http://localhost:3080/JSF2-inicio/ para lanzar nuestra aplicación JSF. El nombre de host y puerto dependerá de la configuración que cada uno tenga en su máquina.

A continuación os dejo unos enlaces para descargar este proyecto inicial en blanco ya montado, que nos servirá como base en el resto de capítulos del tutorial. JSF-inicio

Y las librerías JSF y JSTL que incluimos en el punto 4. Librerías

jueves, 5 de diciembre de 2013

JSF vs MVC usando servlet + RequestDispatcher. Ventajas y desventajas

0 comentarios
En esta entrada, y antes de entrar propiamente en materia, vamos a repasar algunas de las características de JSF que lo hacen una buena alternativa a usar en nuestras aplicaciones web para implementar el modelo MVC

Ventajas de JSF vs MVC usando RequestDispatcher

  • Controles de GUI personalizados --> JSF proporciona una serie de APIs y etiquetas personalizadas para crear formularios HTML con interfaces complejas
  • Manejo de eventos --> JSF hace fácil diseñar código Java que se invoca cuando se envían los formularios. El código puede responder a botones especiales, cambios de un valor particular, selecciones del usuario y más
  • Beans manejados --> En JSF podemos usar property="*" con jsp:setProperty para generar un bean basado en los parámetros de la request. JSF extiende esta capacidad y añade otras utilidades para simplificar el tratamiento de los parámetros de la request
  • Soporte AJAX integrado --> Podemos usar jQuery y otras librerías con servlets y JSPs, pero JSF utiliza AJAX sin necesidad de programación explícita Javascript y usando etiquetas muy simples.
  • Conversión y validación de campos de formularios --> JSF tiene incorporadas capacidades para comprobar que los valores de los formularios están en el formato requerido y para convertir desde cadenas de texto a otro mucho tipos de datos. Si faltan los valores o tienen un formato no apropiado, el formulario se puede repintar autómaticamente con mensajes de error y con los valores introducidos anteriormente.
  • Plantillas de página --> Aunque JSP tiene jsp:include para reutilizar contenido, JSF tiene un sistema completo de plantillas que permite construir páginas que comparten disposición o contenido.
  • Configuración centralizada basada en archivos --> Muchos de los valores de JSF se representan en ficheros XML o de propiedades. Esto implica que muchos cambios se pueden hacer sin necesidad de recompilar el código Java y que se pueden hacer cambios generales en la aplicación modificando un único fichero.
  • Enfoque coherente --> JSF fomenta el uso de MVC en toda la aplicación

DesVentajas de JSF vs MVC usando RequestDispatcher

  • Mayor curva de aprendizaje --> Para usar MVC con el RequestDispatcher estándar solo necesitamos conocer JSP estándar y el API servlet. Para usar MVC con JSF necesitas conocer el API servlet y un framework completo bastante complejo. Otro ejemplo, para añadir funcionalidad AJAX sobre una aplicación existente es mucho más fácil y rápido usar jQuery que convertir la aplicación a JSF2.
  • Peor documentación --> Comparada con los servlet estándar y la API JSP, JSF no tiene apenas documentación online disponible y clara.
  • Menos transparente --> En las aplicaciones JSF pasan muchas más cosas que se escapan de nuestro alcance que en una aplicación web java normal. Por esto las aplicaciones JSF son más difíciles de entender y más difícil de testear y optimizar.
  • El hecho de fomentar el uso de MVC hace muy difícil usar otro enfoque

Esto nos da algo de visión de conjunto de las bondades y debilidades de JSF frente a la implementación de un modelo MVC usando el core de Java, aunque por supuesto habría que entrar a valorar otra muchas alternativas y frameworks como:

  • Spring MVC
  • Apache Wicket
  • Apache Tapestry
  • jMaki
  • y otros tantos...

martes, 26 de noviembre de 2013

¿Que es JSF (Java Server Faces)?

0 comentarios
En esta nueva etapa vamos a adentrarnos en el uso de otra tecnología Java, se trata de JSF, cuya última versión, JSF 2.2 introduce soporte a HTML5, Faces Flow, Stateless views y Resource library contracts.

JavaServer Faces (JSF) es un framework MVC que facilita la construcción de la interfaz de usuario en aplicaciones web mediante el uso de componentes reutilizables.
JSF define una serie de componentes estándar y proporciona una API para el desarrollo de componentes personalizados, además de permitir extender los componentes estándar ya existentes.

Beneficios

JSF minimiza el esfuerzo de crear y mantener aplicaciones que corren en un servidor de aplicaciones Java por los siguientes motivos:

  • Proporciona componentes gráficos reusables
  • Hace fácil la transferencia de información entre componentes
  • Mantiene el estado de la interfaz entre peticiones al servidor
  • Permite implementar componentes personalizados
  • Enlaza eventos en la parte cliente con la parte servidora de la aplicación
  • Beans administrados
  • APIs para validar entradas, definir la navegación entre páginas, internacionalización y accesibilidad, etc...

A lo largo de una serie de entradas iremos introduciéndonos y profundizando en el manejo de esta tecnología en proyectos web.