Escolar Documentos
Profissional Documentos
Cultura Documentos
Pueblos (principiantes Oracle ADF) que son todos de paso por esta calle,
aqu es una manera de empezar con tutoriales de inicio simples.
DeskTop Integracin
http://www.roselen.com.ar/Tutoriales/oracle/htmls/capitulo1.html
http://plinioa.blogspot.com.ar/search/label/1.Curso%20ADF%2011g
http://adfsalvaje.blogspot.com.ar/p/blog-page_21.html
http://www.adictosaltrabajo.com/index.php?filter=tutorials&autor=10
Resumen
En este tutorial sobre Java Server Faces (JSF) intento responder a dos preguntas bsicas de 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.
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.
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.
El cdigo JSF con el que creamos las vistas (etiquetas jsp) es muy parecido al HTML estndar.
Lo pueden utilizar fcilmente desarrolladores y diseadores web.
JSF es extensible, por lo que se pueden desarrollar nuevos componentes a medida, Tambin
se puede modificar el comportamiento del framework mediante APIs que controlan su
funcionamiento.
JSF forma parte del estndar J2EE, mientras que otras tecnologas para creacin de vistas de
las aplicaciones no lo forman, como por ejemplo Struts.
El desarrollo de JSF est realmente empezando. Las nuevas versiones del framework recogen
la funcionalidad de versiones anteriores siendo su compatibilidad muy alta, de manera que el
mantenimiento de aplicaciones no se ve penalizado por el cambio de versiones.
Utilizar el alicate para clavar. JSF es una herramienta y como tal tiene una forma de uso. Si nos
empeamos en seguir desarrollando las pginas como siempre, intentando adaptar JSF al
modo al que habitualmente desarrollamos en vez de adaptarnos a JSF complicaremos el
desarrollo
Abuso del javascript. JSF permite utilizar javascipt para hacer ms rpida una pgina html,
evitando peticiones al servidor. Sin embargo la introduccin de javascript en la pgina complica
y alarga los desarrollos con JSF, y en general con jsp. La capa javascript aade etapas
adicionales a la aplicacin, que hace ms difcil su depurado. Un consejo: la pgina debera
poderse ejecutar sin prdida de funcionalidad (slo de rendimiento si se desactiva el
javascript).
Recoger los datos introducidos por el usuario en los campos del formulario.
Controlar el estado de los controles del formulario segn el estado de la aplicacin, activando,
ocultando o aadiendo y eliminando controles y dems elementos
Controlando los eventos que ocurren en los controles (pulsaciones de teclas, botones y
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
h:dataTable. Crea una tabla de datos dinmica con los elementos de una propiedad de tipo
Array o Map del bean.
h:inputSecret . Incluye un campo editable de tipo contrasea (no muestra lo que se escribe)
h:outputText
h:panelGroup. Agrupa varios componentes para que cierto componente los trate como un nico
componente (por ejemplo para meter varios componentes en una celda de un panelGrid.
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.
Campos editables
El controlador JSF dispone de un conjunto de etiquetas que permiten definir formularios JSF. Las ms
sencillas son:
h:form. Esta etiqueta sustituye al form de HTML, aadiendo la funcionalidad JSF al formulario
h:inputText. Sirve para crear campos editables en los que introducir los datos
Cuando la pgina JSF contiene elementos que incluyen acciones se ejecuta una fase ms en el
procesamiento de la peticin al servidor. Si en nuestro formulario hay botones u otros elementos que
tienen una propiedad action, si se pulsa sobre el elemento cuando la peticin sea procesada por el
servidor se ejecutar la lgica de la accin asociada a este elemento. Este es el mecanismo JSF
habitual para ejecutar a lgica de la aplicacin. Esto se hace ejecutando los mtodos del backbean
asociado a la pgina
Finalizar la peticin mostrando la pgina jsp que origin la peticin, que es la opcin por
defecto.
Envindo al usuario una peticin de redireccin, por lo que el navegador del usuario se dirigir
automticamente a otra pgina cuando reciba la respuesta a su peticin.
La etiqueta de destino. Es la cadena que identifica el destino. Esta cadena es devuelta por el
mtodo del backbean que procesa la accin.
La pgina de destino para cada etiqueta. Normalmente es el jsp el que procesar la peticin de
salida, utilizando los datos que hay en la request y en la sesin.
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
Tipo de la propiedad
valor
bean.stringProperty
String
bean.myBoolean
boolean
bean.property.property2
El valor de la propiedad 2
property del bean
bean.myhashmap[madrid]
Bean: class
bean.myhashmap[madrid].property3
bean.myhashmap.madrid
Bean: class
Bean: class
Myhashmap: HashMap (Map)
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:
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
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.
.createValueBinding
"}").getValue(facesContext);
}
El mtodo oficial para acceder a un bean en JSF 1.2, segn cdigo de ejemplo de Sun es:
=" CLASS="msonormal" STYLE="margin-bottom: 0.5cm; border: 1.00pt solid #000000; padding: 0.05cm
0.19cm">public Object getBeanNuevo(String beanName) {
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.getAp
.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:
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:
Navegacin a una url con extensin JSF (normalmente *.jsf o *.faces). Este es el caso cuando
escribimos en la URL del navegador una url que est controlada por JSF, por ejemplo siguiento
el enlace de una pgina que estamos visitando.
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.
Buscamos en la pgina JSP el cdigo del botn. Por ejemplo podra ser algo as:
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
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:
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
8.
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.
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 permite definir la navegacin no solo a travs de los mtodos de navegacin de los beans,
sino incluso en la propia pgina (navegacin definida en los componentes de la pgina).
JSF permite recoger los parmetros del formulario de manera ms sencilla que Struts, e
incorpora un lenguaje de expresiones que lo hace ms simple.
JSF est pensado para la creacin de interfaces de usuario avanzadas. Basta ver los nuevos
frameworks extendidos JSF, como Apache MyFaces Trinidad y el resto de frameworks JSF con
soporte AJAX.
Em resumen, para los desarrolladores que han usado algn lenguaje visual (visual basic,
delphi, swing, etc.) el modo de trabajo de JSF pronto les parecer cercano.
Para un proyecto nuevo, la eleccin es sencilla, como dice el propio creador de Struts: utiliza JSF.
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.