Académique Documents
Professionnel Documents
Culture Documents
Deseo registrarme Entrar He olvidado mis datos de acceso Inicio Quines somos Tutoriales Formacin Comparador de salarios Nuestro libro Charlas Ms
Consultor de desarrollo de proyectos informticos. Su experiencia profesional se ha desarrollado en empresas como Compaq, HP, Mapfre, Endesa, Repsol, Universidad Autnoma de Madrid, en las reas de Desarrollo de Software (Orientado a Objetos), tecnologas de Internet, Tcnica de Sistemas de alta disponibilidad y formacin a usuarios.
ltimas Noticias
Pirineos on Tour
60.382
VII Autentia Cycling Day Autentia patrocina la charla sobre Java SE 7 en Madrid Alfresco Day 2011 XVII Charla Autentia - Grails - Vdeos y Material
Introduccin a JSF Java Server Faces. 1 Resumen. 1 Introduccin. 1 Qu es JSF?. 2 Porqu utilizar JSF en nuestros proyectos. 2 Riesgos en el desarrollo JSF. 3 Cmo funciona JSF. 4 Las etiquetas JSF. 4 Los backbeans. 5 Respondiendo a las acciones del usuario. 6 La navegacin entre pginas. 6 Las etapas del procesamiento de la peticin. 7 Gestin de los beans. 8 El lenguaje de expresiones EL. 8
Histrico de NOTICIAS
ltimos Tutoriales
10 Nuevas Caractersticas de Maven 3 CORRE!!! Deja el ordenador!! Monitorizando estado de servidores JEE con Nagios y JMX4Perl Inyeccin de una lista de servicios en Spring Construccin personalizada de objetos JSON en cliente (JavaScript)
El entorno FacesContext 9 Acceso a los beans de la aplicacin. 10 Cmo seguir la pista a una peticin JSF. 12 Seguir la pista a peticiones .jsf 12 Seguir la pista a acciones JSF. 12 JSF frente a Struts. 14 JSF y AJAX.. 15 El futuro de JSF. 15 Conclusin. 15
Resumen
En este tutorial sobre Java Server Faces (JSF) intento responder a dos preguntas bsicas de JSF: porqu usar JSF en nuestras aplicaciones web Java cmo usar JSF Hablaremos de su funcionamiento, las pginas JSF, las etiquetas JSF, los managed beans, la navegacin entre pginas, el ciclo de vida de l peticin al servidor y otros temas.
Introduccin
Para el desarrollo de aplicaciones de negocio se utiliza frecuentemente el patrn de diseo MVC Modelo Vista Controlador (Model View Contrdller) que ademas es sencillo de implenentar en las aplicaciones web. En este patrn el modelo es modificable por las funciones de negocio. Estas funciones son solicitadas por el usuario mediante el uso de un conjunto de vistas de la aplicacin que solicitan dichas funciones de negocio a travs de un controlador, que es el mdulo que recibe la peticiones de las vistas y las procesa. Se suele clasificar en dos tipos a las aplicaciones basadas en MVC: tipo 1. Las vistas conocen la accin que se va a invocar en su peticion. Normalmente la funcin esta cableada dentro de la vista tipo 2. El controlador introduce un conjunto de reglas que mapean a las peticiones con las funciones, controlando adems el flujo de navegacin por la aplicacin. Un ejemplo de aplicaciones de tipo 1 son las que se construyen utilizando JSF o ASP.NET y como ejemplo de tipo 2 serian las creadas con Struts. La creacin de aplicaciones basadas en el patrn MVC se ve facilitada por el uso de marcos de trabajo (frameworks). Un marco de trabajo es un conjunto de APIs y mdulos normalmente acompaados de la documentacin y guia de uso que definen la manera de implementar alguna de las capas de nuestra aplicacin. Lo podemos ver tambin como la estructura o cimientos sobre los que crear nuestra aplicacin.
2011-06-20
2011-05-24
2011-04-13
Qu es JSF?
JSF es un marco de trabajo para crear aplicaciones java J2EE basadas en el patron MVC de tipo 1. JSF tiene como caracterstas principales: -Utiliza pginas JSP para generar las vistas, aadiendo una biblioteca de etiquetas propia para crear los elementos de los formularios HTML. Asocia a cada vista con formularios un conjunto de objetos java manejados por el controlador (managed beans) que facilitan la recogida, mapipulacin y visualizacin de los valores nostrados en los diferentes elementos de los formularios. Introduce una serie de etapas en el procesamiento de la peticin, como por ejemplo la de validacin, reconstruccin de la vista, recuperacin de los valores de los elementos, etc. Utiliza un sencillo fichero de configuracin para el controlador en formato xml Es extensible, pudiendo crearse nuevos elementos de la interfaz o modificar los ya existentes. Y lo que es ms importante: forma parte del estndar J2EE. En efecto, hay muchas alternativas para crear la capa de presentacin y control de una aplicacin web java, como Struts y otros frameworks, pero solo JSP forma parte del estndar.
movimientos del ratn). Las aplicaciones JSF estn formadas por los siguientes elementos principales: Pginas JSP que incluyen los formularios JSF. Estas pginas generarn las vistas de la aplicacin Beans java que se conectan con los formularios JSF Clases java para la lgica de negocio y utilidades. Ficheros de configuracin, componentes a medidad y otros elementos del framework. Resto de recursos de la aplicacin web: recursos esttios, javascript y otros elementos.
Los backbeans
A las clases java que se asocian a los formularios JSF se les denomina backend beans ya que son los beans (clases java) que estn detras del formulario. Estos beans se referencian en el fichero de configuracion de JSF en el apartado de managed beans, ya que son beans gestionados por el controlador JSF. este se encarga de su construccin y destruccin automticas cuando es necesario. Estructura de las pginas En su versin ms sencilla, cada pgina JSF est formada por una pgina JSP que contiene un formulario (HTML FORM) y un backbean. El controlador JSF registra en el servidor de aplicaciones un tipo especial de peticin, tipicamente *.jsf, que estar asociado a estas pginas.
El primer caso comienza cuando el usuario realiza en su navegador una peticin de navegacin a una url de tipo *.jsf. Cuando al servidor web llega una peticin del tipo pagina JSF, el controlador JSF entra en funcionamiento. Primero comprueba si es la primera vez que se accede a dicha pgina. Si es as, carga la pgina jsp asociada pagina.jsp y la procesa construyendo en memoria la repesentacin de los controles de la pgina. Tras esta etapa JSF sabe cmo construir el cdigo HTML de salida y la lista de controles de usuario que la cumplen, es decir, sabe lo que contiene y cmo pintarla. El siguiente paso es asociarle los backbeans. Para ello, del procesamiento de la pgina jsp, el controlador ha obtenido la lista de backbeans asociados, por lo que procede a buscarlos en sus correspondientes mbitos de la aplicacin como la request y la session. Los beans que no existan se crean llamando a los constructores de sus clases, definidos en la seccion de managed beans del fichero de configuracin de JSF. El tercer paso es dar valores a las propiedades de los elementos JSF de la pgina. Aqu juega un papel fundamental el lenguaje de expresiones de JSF, que es parecido al lenguaje de expresiones que se permite en las pginas jsp normales. En su versin ms sencilla una expresin JSF sera del tipo #{mibackbean.propiedad}. Finalmente el servidor devuelve al usuario una pgina creada a partir de una pgina JSP que incluye normalmente etiquetas JSF, cuyos valores se extraern del backbean asociado, ahora ya actualizados.
Si es un envo directo interno o una redireccin externa. En el primer caso la respuesta se generar en la misma peticin mediante una redireccin interna a otro jsp o servlet. En el segundo caso se enviar como respuesta al navegador una instruccin de redireccin para que el navegador realice una nueva peticin de otra pgina. Adems las direcciones de origen admiten el * para que una misma regla sirva para mltiples pginas. Tambien se pueden poner reglas por defecto que se aplican a todas las peticiones.
El lenguaje de expresiones EL
Para facilitar la visualizacin y recogida de los datos de los formularios JSF introduce un lenguaje de expresiones similar al introducido en jsp. De hecho a partir de JSF 1.2, mbos lenguajes de expresiones se han unificado. El lenguaje de expresiones permite acceder de manera muy sencilla a las propiedades de los backbeans. En una forma ms sencijla una xpresin EL se puede escribir como: #{backbean.propiedad} Esto permite asignar o leer valores de las etiquetas JSF. Por ejemplo para escribir y leer valores se pueden usar las etiquetas JSF: <h:outputText value=#{backbean.propiedad} /> <h:inputTtxt value=#{backbean.propiedad} /> Otros ejemplos de expresiones seran:
Expresin EL bean.stringProperty
bean.myBoolean bean.property.property2
true o false o su cadena ture o false El valor de la propiedad 2 del objeto property del bean Devuelve el elemento de clave madrid en el hashmap myhashmap del bean Devuelve la propiedad property3 del elemento de clave madrid en el hashmap myhashmap del bean Devuelve el elemento de clave madrid en el hashmap myhashmap del bean (otra forma de acceder)
bean.myhashmap[madrid]
bean.myhashmap.madrid
Hay otras muchos tipos de expresiones EL, por ejemplo usando el operador ! o el operador empty. Describir el lenguaje EL es tema de un artculo...
El entorno FacesContext
Un backbean es una clase simple que no conoce nada del resto de la aplicacin. Para acceder al entorno JSF y en general al entorno de ejecucin en el que la clase se est ejecutando JSF prev el mecanismo de contexto JSF FacesContext. El FacesContext es una clase que sirve al bean de puente al exterior, ya que le permite acceder no solo al contexto JSF sino tambin al contexto HTTP. Esto permite al bean el acceso a los dems beans de la aplicacin, a las propiedades de la aplicacin e incluso a la peticin HTTP que se est ejecutando. El uso del contexto FacesContext desde el bean es simple, ya que la clase FacesContext proporciona un mtodo que devuelve una referencia a la instancia JSF asociada a la peticin. El siguiente cdigo muestra un ejemplo de este acceso:
//Con esto obtenemos la lista de nombres de los parmetros enviados // en la request Enumeration params = request.getParameterNames();
Estudiando las diferentes APIs involucradas en la gestin del contexto jsf, la peticin (request), la respuesta (response) y la aplicacin (Application) obtenidas desde facesContext podremos realizar otras tareas avanzadas en JSF.
// obtiene el bean mybean de clase MyBean FacesContext facesContext = FacesContext.getCurrentInstance(); MyBean myBean = (MyBean) facesContext.getApplication() .getVariableResolver().resolveVariable(facesContext, "myBean");
public Object getBean(String beanName) { FacesContext facesContext = FacesContext.getCurrentInstance(); return facesContext.getApplication() .createValueBinding("#{" + beanName + "}").getValue(facesContext); }
El mtodo oficial para acceder a un bean en JSF 1.2, segn cdigo de ejemplo de Sun es:
FacesContext facesContext = FacesContext.getCurrentInstance(); //Este es el mtodo correcto segn define el api RI de Sun javax.el.ELContext elContext = facesContext. getELContext(); javax.el.ExpressionFactory ef = facesContext.getApplication() .getExpressionFactory(); javax.el.ValueExpression ve = ef.createValueExpression(elContext, "#{InstallationBean}", Object.class); return ve.getValue(elContext); }
De esta forma podemos obtener el bean que necesitamos. Esto se usa fundamentalmente dentro de los mtodos de los beans que ejecutan las acciones. Ya que los backbeans de las aplicaciones JSF no implementan ninguna interfaz especial y los mtodos de las acciones no reciben parmetros, sin la ayuda del contexto FacesContext no podran comunicarse con otros beans de la aplicacin. El ejemplo ms sencillo de acceso a otros bean consiste en preparar el bean para la jsp que procesa una peticin JSF. Supongamos una pgina JSP que tiene un botn cuya accin nos va a llevar a otra pgina diferente. Si ambas pginas comparten el mismo backbean, el paso de la informacin de una a otra es sencillo. Basta que o bien pongamos el bean en la sesin o bien pasemos todos las propiedades del bean como inputs. Al ejecutar la accin se llamar al mtodo del bean que es responsable de su ejecucin, y en este mtodo podremos fijar los valores de las propiedades que utilizar la pgina de salida. Pero podra ocurrir que ambas pginas tuviesen backbeans diferentes. Entonces, antes de finalizar el mtodo de la accin debemos preparar el bean de la segunda pgina. Para ello se utilizan los mtodos antes presentados (getBean y getBeanNuevo), que nos permitirn recuperar o crear el bean que necesita la pgina de salida. Una vez que tenemos el bean es fcil asignarle valores a sus propiedades. Un ejemplo sencillo podra ser el siguiente:
//Creamos un bean en la request externo // al bean actual Ejemplo6b ejemplo6b = (Ejemplo6b) getBean("ejemplo6b");
//Cuando el controlador navege al jsp de salida ejemplo6b // no construir un nuevo bean, ya que existir en // la request return "ejemplo6b"; }
Donde suponemos que tenemos dos pginas ejemplo6.jsp y ejemplo6b.jsp, cada una de ellas con el backbean ejemplo6 o ejemplo6b, que son objetos de clase Ejemplo6 y Ejemplo6b que se han declarado en el faces-config.xml as:
<!-- managed beans para ejemplo6 --> <managed-bean> <managed-bean-name>ejemplo6</managed-bean-name> <managed-bean-class> adictosaltrabajo.ejemplo6.Ejemplo6 </managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>ejemplo6b</managed-bean-name> <managed-bean-class> adictosaltrabajo.ejemplo6.Ejemplo6b </managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
Ejecucin de una accin dentro de una pgina JSF. Este es el caso que se produce cuando pinchamos en un botn de una pgina de una aplicacin JSF.
2. De la expresin EL de la accin del botn obtenemos el nombre del bean y el nombre del mtodo que ejecuta la accin. Normalmente las acciones sern del tipo # {beanName.actionName}, por lo que el nombre del bean sera beanName y el del mtodo que ejecutar la accin actionName. En el ejemplo anterior, el bean es ejemplo3 y el mtodo que se ejecutar es enviar. 3. Ahora buscamos la clase del bean. Para ello buscamos en el faces-config.xml el managed-bean que hemos encontrado. En nuestro ejemplo la seccin correspondiente indica, como vemos a continuacin, que el bean ejemplo3 se crea en el mbito request de la peticin y es de clase: adictosaltrabajo.ejemplo3.Ejemplo3
<!-- managed beans para ejemplo3 --> <managed-bean> <managed-bean-name>ejemplo3</managed-bean-name> <managed-bean-clas> adictosaltrabajo.ejemplo3.Ejemplo3 </managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
4. Ahora localizamos en la clase Ejemplo3 el mtodo enviar, que ser un public String enviar()
return "success"; }
5. Tras seguir la pista a la lgica de negocio que veremos en el mtodo (el de ejemplo es muy simple, no aparece ninguna), nos fijamos en las sentencias return del mtodo, ya que son las que generan el valor de retorno del mtodo. En nuestro ejemplo tambin es muy simple, ya que slo contiene el return success. 6. Cuando hemos localizado la cadena de retorno, en nuestro casso success, buscamos en el faces-config.xml la regla de navegacin cuya entrada sea el JSP inicial. En nuestro caso las reglas de navegacin para esta peticin son:
<!-- Reglas de navegacion para el ejemplo 3--> <navigation-rule> <from-view-id>/ejemplo3/ejemplo3.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/ejemplo3/panelSuccess.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>OK</from-outcome> <to-view-id>/ejemplo3/panelOk.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>error</from-outcome>
7. la etiqueta from-view-id nos dice las JSP de entrada que sern controladas por esta regla de navegacin (puede contener caracteres comodn). Las etiquetas from-outcome nos dan los posibles valores de las cadenas retornadas por las acciones, y las etiquetas toview-id nos dan las JSP de salida correspondientes. Estas dos etiquetas irn siempre en pares de etiquetas dentro de una etiqueta navigation-rule, que define una regla de navegacin. En nuestro ejemplo la cadena success lleva a la pgina
/ejemplo3/panelSuccess.jsp Ahora ya sabemos la pgina por la que saldr la accin. Slo nos resta echarle un vistazo a dicha pgina para saber los beans que se van a necesitar para su construccin.
8. En el caso ms complicado, la pgina que estamos viendo la hemos obtenido tras ejecutar varias acciones. Esto nos obligar a repetir el proceso anterior varias veces desde el inicio de la peticin para saber a qu pagina hemos llegado. Para evitarnos estos los conviene poner al principio de la pgina algn comentario en el propio cdigo fuente de la pgina que nos indique el JSP que estamos visualizando.
JSF y AJAX
JSF es un framework que lanza muchas peticiones al servidor. Para optimizar dicho dialogo estn empezando a aparecer implementaciones de JSF que incorporan AJAX en sus etiquetas. Esto permite actualizar los componentes en el navegador del usuario de manera selectiva, sin necesidad de recargar
la pgina completa. La combinacin JSF ajax dota a las pginas de gran dinamismo sin complicar el desarrollo, evitando el uso de javascript codificado a mano asegurando un mayor soporte a los navegadores web.
El futuro de JSF
El framework JSF forma parte importante del estndar java J2EE. De hecho se est preparando una nueva versin que traer numerosas novedades, sobre todo en lo que se refiere a su integracin con AJAX. Tambin se est comenzando a utilizar en numerosas aplicaciones empresariales, ya que permite crear pantallas de usuario bastante complejas con una cierta facilidad, aunque desde luego no es sencillo la primera vez que te enfrentas a este framework. En la nueva versin se espera una mejora sobre el control de las fases del ciclo de vida de la peticin que faciliten la creacin de componentes JSF complejos que se usan de manera simple. En un artculo posterior intentar poneros ejemplos de aplicaciones basadas en JSF y AJAX utilizando alguno de los frameworks ms importantes, como puede ser MyFaces Trinidad o IceFaces.
Conclusin
Este artculo sirve de introduccin al framework JSF. Ser complementado con otro artculo que incluir una aplicacin de ejemplo lista para funcionar que explicar muchas de las tcnicas fundamentales de creacin de aplicaciones JSF. Espero que con este artculo y echando un vistazo a aplicaciones JSF ya desarrolladas os podais hacer una idea de sus posibles aplicaciones, as como de su potencia. Un consejo, una vez que comenceis a desarrollar una aplicacin de gran envergadura con JSF os dareis rpidamente cuenta que con el API JSF bsico no vais muy lejos. En mi caso llevo bastante tiempo usando MyFaces Tomahawk y la verdad es que es bastante potente, eliminando bastantes de las restricciones que impone el JSF Core Tags, y que aade etiquetas bastante tiles.
Enviar comentario
(Slo para usuarios registrados)
COMENTARIOS
RunIT
2010-12-26 - 02:20:00
Cristbal, felicitaciones por el tutorial, es muy claro, sera un honor que formes parte de nuestra red social para profesionales IT (Run IT) donde buscamos gente con tu talento y conocimientos para que participe de las discusiones y para que publiquen sus artculos para darlos a conocer a la comunidad. Saludos! Mayu
2010-07-19 - 07:40:36
Hola amigo me parecio interesante el tutorial. Muy bien explizado..!! Y quiero aprender a usar jsf para mis proyectos el problema esque nose que ide usar si netbeans o eclipse para programar en ubuntu..! Agradeceria me ayudes en esto. jpacheco
2010-01-15 - 13:05:38
ENORME El tutorial!!! ... espero con impaciencia los siguientes articulos sobre este tema .... Gracias dorian ordoez
2009-08-21 - 05:09:32 AM
EL MANUEL ESTA EXELENTE: tengo una semana de empezar ha utilizar jsf, antes utilizaba estruts, tengo como ide NETBEAS 6.7, tiene algun manual que se tenga la libreria de tomahawk aunque tengo problemas,
al intentear utilizar esa libreria., pero me gustaria un manual. porque este estaba EXELENTE.... Olga CB
2009-08-11 - 10:58:29 PM
Hola, es un excelente tutorial para aquellos que apenas estamos incursionando en estas reas..es muy claro..me falta revisar el ejemplo paso a paso, pero se que como la mayoria de sus tutoriales ser muy util...Gracias por compartir su conocimiento.... :) Rafael es bueno aunque faltaron mas ejemplos Victor Hugo Fernande
2009-07-16 - 04:31:50 PM 2009-08-03 - 11:26:57 PM
beuno creo que para mi que estoy empezando y que bueno busco las mejores cosas para aprender y ser tan bueno como ustedes creo que esta de pelos espero que continuen compartiendo ese don que dios les dio para que nosotros los terricolas podamos seguir con sus pasos en este mundo de aprendizaje, bueno el tutorial es exelente gracias. Csar
2009-06-04 - 07:22:28 AM
Est excelente, sobre todo por que da una muy buena idea de como funciona jsf joshi
2009-05-04 - 08:02:10 AM
Muy buena introduccin, en especial lo de las fuentes para obtener el context y el request. alex
2009-04-04 - 03:55:17 AM
me gustaria algunos temas mas avanazadossobre JSF algunos framework com icefaces o rightfaces
Esta obra est licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5
Copyright 2003-2011 All Rights Reserved | Texto Contacto legal y condiciones de uso | Banners | Powered by Autentia |