Documentos de Académico
Documentos de Profesional
Documentos de Cultura
'n ()* y una implementaci+n de referencia para& representar componentes '* y manejar su estado, manejo de eventos validaci+n del lado del servidor y conversi+n de datos, definir la nave$aci+n entre p$inas, soportar internacionali-aci+n y accesibilidad, y proporcionar e.tensibilidad para todas estas caracter%sticas"
'na librer%a de eti/uetas JavaServer )a$es (JS)! personali-adas para dibujar componentes '* dentro de una p$ina JS)"
0ste modelo de pro$ramaci+n bien definido y la librer%a de eti/uetas para componentes '* facilitan de forma si$nificativa la tarea de la construcci+n y mantenimiento de aplicaciones 1eb con '*s del lado del servidor" El cdigo JSF con el que creamos las vistas (etiquetas jsp) es muy parecido al HTML
(l$unos de las beneficios /ue nos ofrece esta tecnolo$ia son& 2ratar el desarrollo de interfa-es de usuario de una forma similar a Swin$ Visual 3asic o 4elp5i donde la pro$ramaci+n del interfa- se 5acer a trav6s de componentes y basada en eventos"
JSF es muy fle.ible" )or ejemplo nos permite crear nuestros propios componentes o crear nuestros propios render para pintar los componentes se$7n nos conven$a" #a tecnolo$%a JavaServer Faces permite construir aplicaciones web /ue introducen realmente una separaci+n entre el comportamiento y la presentaci+n permitiendo a cada miembro del e/uipo de desarrollo de una aplicaci+n 1eb enfocarse en su parte del proceso de desarrollo
8Confi$uracion de los bens en jsf #os beans son clases java /ue se asocian a los JSF para poder permitir separar la presentacion y la lo$ica de ne$ocio en el desarrollo de una aplicacion web, pueden ser confi$urados y manipulados sin pro$ramar a trav6s de entornos de trabajo (frameworks! o entornos de desarrollo inte$rados" Se referencian en el fic5ero de confi$uracion de JSF en el apartado de mana$ed beans"
#a confi$uraci+n de los beans establece el nombre con el /ue se invocan sus acciones en las p$inas jsp y la ruta completa del pa/uete en el /ue se encuentra la clase /ue representa el backin$ bean"
Vamos a describir como confi$urar un bean mediante un arc5ivo de confi$uraci+n" #os detalles son mas bien t6cnicos" 0l arc5ivo de confi$uraci+n ms com7nmente usado es 1038*9F:faces8confi$".ml"
'n bean se define con una eti/ueta mana$ed8bean al comien-o del fic5ero faces8confi$".ml" 3sicamente se debe especificar nombre del bean con la eti/ueta
;mana$ed8bean8name<Ser necesario a=adir un blo/ue ;mana$ed8bean< por cada bean /ue se /uiera
sea $estionado por el framework" 9ombre cualificado de la clase a la /ue pertenece el bean" ;mana$edbean8class<
mbito del bean siendo sus posibles valores& re/uest session y application(peticion sesion aplicacion! con la eti/ueta ;mana$ed8bean8scope< por ejemplo para definir un bean llamado usuario /ue est en la clase 'suario3ean y con un mbito de sesi+n ser%a& ;mana$ed8bean< ;mana$ed8bean8name<usuario;:mana$ed8bean8name< ;mana$ed8bean8class<'suario3ean;:mana$ed8bean8class< ;mana$ed8bean8scope<session;:mana$ed8bean8scope< ;:mana$ed8bean<
8confi$uracion para nave$acion en jsf" 0l desarrollador de la aplicaci+n define la nave$aci+n por la aplicaci+n mediante el fic5ero de confi$uraci+n faces8confi$".ml el mismo fic5ero en el /ue se declararon los mana$ed beans " Cada re$la de nave$aci+n define c+mo ir de una p$ina (especificada en el elemento from8view8id! a otras p$inas de la aplicaci+n" 0l elemento navi$ation8rule puede contener cual/uier n7mero de elemento navi$ation8case cada uno de los cuales define la p$ina /ue se abrir lue$o (definida por to8view8id! basndose en una salida l+$ica (definida mediante from8outcome!" #a salida se puede definir mediante el atributo action del componente '*Command /ue env%a el formulario" (5ora vamos con las re$las de nave$aci+n de esta manera indicamos a /ue p$ina ir tras otra p$ina" 0n este caso la nave$aci+n es simple tras pulsar el bot+n (ceptar nave$amos desde inde."jsp 5asta 5ola"jsp" 0stas re$las de nave$aci+n se especifican en el fic5ero faces8confi$".ml como se muestra a continuaci+n& ;faces8confi$< ;navi$ation8rule< ;from8view8id<:inde."jsp;:from8view8id< ;navi$ation8case< ;from 8outcom e<lo$in;:from8outcome< ;to8view8id<:5ola"jsp;:to8view8id< ;:navi$ation8case< ;:navi$ation8rule< ;mana$ed8bean< ;mana$ed8bean8name<usuario;:mana$ed8bean8name<
;mana$ed8bean8class<'suario3ean;:mana$ed8bean8class< ;mana$ed8bean8scope<session;:mana$ed8bean8scope< ;:mana$ed8bean< ;:faces8confi$< 0l valor de from8outcome (lo$in! indica la acci+n /ue se debe producir en la p$ina from8view8id (inde."jsp! para nave$ar al destino representado por to8view8id (5ola"jsp!" #a acci+n es un mero nombrecito /ue se da a los botones de un formulario, en nuestro caso la p$ina inde."jsp inclu%a la eti/ueta& ;5&command3utton value>?(ceptar? action>?lo$in?:< 80ti/uetas jsf JSf dispone de un conjunto bsico de eti/uetas /ue permiten crear fcilmente componentes dinmicos en las p$inas web" 0stas eti/uetas son&
'(command)utton! *n &otn al que podemos asociar una accin! '(commandLin+! *n enlace 'iperte,to al que podemos asociar una accin!
'(dataTa&le! -rea una ta&la de datos din mica con los elementos de una propiedad de tipo .rray o Map del &ean! '(#orm! /e#ine el #ormulario JSF en la p gina JS01 '(grap'ic2mage! Muestra una imagen jpg o similar! '(inputHidden! 2ncluye un campo oculto del #ormulario! '(inputSecret ! 2ncluye un campo edita&le de tipo contrase$a (no muestra lo que se escri&e) '(inputTe,t! 2ncluye un campo de te,to normal! '(inputTe,tarea! 2ncluye un campo de te,to multil3nea! '(message! 2mprime un mensaje de error en la p gina (si se 'a producido alguno)! '(messages! 2mprime varios mensajes de error en la p gina4 si se 'an producido!
'(outputFormat! Muestra te,to parametri"ado! *tili"a la clase java!te,t!MessageFormat de #ormateo! '(outputLa&el! Muestra un te,to #ijo! '(outputLin+! -rea un enlace 'iperte,to! '(outputTe,t '(panel5rid! -rea una ta&la con los componentes incluidos en el panel5rid!
'(panel5roup! .grupa varios componentes para que cierto componente los trate como un 6nico componente (por ejemplo para meter varios componentes en una celda de un panel5rid! '(select)oolean-'ec+&o,! -rea una casilla con dos estados( activado y desactivado! '(selectMany-'ec+&o,! -rea un conjunto de casillas activa&les! '(selectManyList&o,! -rea una lista que permite seleccionar m6ltiples elementos! '(selectManyMenu! -rea una lista desplega&le de seleccin m6ltiple!
'(select7neList&o,! -rea una lista en la que se puede seleccionar un 6nico elemento! '(select7neMenu! -rea na lista desplega&le de seleccin! '(select7ne8adio! -rea una lista de &otones4 redondos normalmente4 e,cluyentes!
8Conversores en jsf
*na de las muc'os mecanismos que nos proporciona JSF de #orma autom tica para el desarrollador es el de la conversion! La conversin es el proceso a travs del cual se transforman los datos ingresados por el usuario en la forma Web en los tipos de datos que mapean en sus correspondientes variables de su bean. Es decir, los datos que proporciona el usuario, manejados como cadenas de texto, se transforman en int, Date o segn sea el tipo de dato que se a definido para cada uno de ellos en el bean especificado, ! asi mismo volver a convertir a cadena en caso de que se quiere extraer informacion previamente !a guardada. JSF invoca a losConversores antes de e#ectuar las validaciones y por lo tanto antes de aplicar los valores introducidos a las propiedades del &ean! En el caso de que un dato tipo cadena no se corresponda con el tipo J.9. apropiado4 el Conversor correspondiente lan"ar un ConversionException y el componente se marcar como invalidado! "#$ nos proporciona los siguientes conversores% &igDecimal'onverter, &ig(nteger'onverter, )umber'onverter,(nteger'onverter, # ort'onverter,&!te'onverter,' aracter'onverter, $loat'onverter,Double'onverter,&oolean'onverter,Date*ime'onverter +ara acer uso de los conversores usaremos el ,tributo o +ropiedad converter o el *ag f%converter
8validadores en jsf
El proceso de validacin se asegura que el dato introducido en el correspondiente componente es correcto seg6n la lgica de la aplicacin4 de acuerdo a ciertas reglas especi#icadas para cada uno de estos4 como pueden ser la longitud m3nima y m ,ima para un campo !El proceso de validacin ocurre antes de que el Frame:or+ asigne los valores introducidos en el #ormulario a las propiedades del &ean y justo despu;s de que se 'ayan aplicado las conversiones4 en el caso de que 'aya! Las validaciones aseguran que un dato introducido en un formulario JSF tenga un valor correcto, cada componente JSF que reci&a datos de entrada puede tener asociado < o m s validadores
0odr3amos agrupar las validaciones de (JSF4 ./F )-) en cuatro tipos &ien di#erenciados( 1 9alidaciones est ndar( Este tipo de validaciones son las mas & sicas4 y se reali"an a nivel de vie%4 en el jsp! Ejemplos de este tipo de validaciones son compro&ar que un valor este entre un determinado rango4 compro&ar la longitud del valor introducido4 etc! 1 9alidaciones en el &ac+ing &ean( Este tipo de validaciones suelen ser un poco m s complejas que las anteriores! = al reali"arse en el &ac+ing pueden tratarse de validaciones m6ltiples que tengan en cuenta valores de otros campos del #ormulario! 1 9alidaciones en la capa de negocio4 a nivel de aplicacin( Este tipo de validaciones tratan de validar un proceso de nuestra aplicacin4 se trata de validar el proceso que se reali"ar al rellenar el #ormulario! Es decir4 en este tipo de validaciones mas que validar que los datos introducidos sean correctos4 lo que se comprue&a es que se pueda 'acer una determinada tarea con esos datos! 1 9alidaciones con nuestro propio 9alidator( Este tipo de validadores es #recuente usarlos cuando tenemos un tipo de campo que 'ay que validar y que se repite con #recuencia en di#erentes #ormularios de nuestra aplicacin4 como podr3a ser validar un >2F o un n6mero de cuenta &ancaria4 etc!
8ciclo de vida en jsf <! 8estore vie%(8estaurar los componentes de la vista)( En esta etapa el controlador construye en memoria la estructra de componentes de la pagina ?! .pply request values(.plicar los valores de peticion)( Se leen los valores de la request(o&jeto implincito que permite reali"ar peticiones con par metros) y se aplican so&re los componentes! En este momento es cuando se llama a los converters! Si 'ay alg6n error en la conversin se ir directamente a la #ase @render responseA! Si un componente tiene @immediateBtrueA su validacin (y el procesamiento de los eventos provocados por esa validacin) se 'ar en esta #ase ! C! 0rocess validations(0rocesamiento de las validaciones)( se validan todos los componentes (todos los que tienen @immediateB#alseA4 ya que los que lo tienen a true ya se validaron en la #ase anterior)! Si #alla alguna de las validaciones se ir directamente a la #ase @render responseA! D! *pdate model values(.ctuali"ar los valores del modelo)( Los valores leidos y validados son cargados en los &eans! E! 2nvo+e application(2nvocacion a la aplicacion)( Se invoca a los m;todos de los &eans de la pagina! Si es necesario se reali"a la navegacion F! 8ender response(5eneracion de la p gina)( En esta #ase se genera la pagina que sera enviada al usuario con todos sus elementos y valores actuali"ados!
0stos mbitos normalmente mantienen beans y otros objetos /ue necesitan estar disponibles en diferentes componentes de una aplicaci+n web"
@mbito de tipo petici+n& 0s el de vida ms corta" 0mpie-a cuando una petici+n A22) comien-a a tramitarse y acaba cuando la respuesta se env%a al cliente" )or ejemplo el la si$uiente l%nea de c+di$o& ;f&load3undle basename>?mensajes? var>?msjs?:< la eti/ueta f&load3undle 5ace /ue la variable bundle solo e.ista mientras dura la petici+n" 'n objeto debe tener un mbito de este tipo s+lo si lo /ue se /uiere es reenviarlo a otra fase de procesado" @mbito de tipo sesi+n& 0l nave$ador env%a una petici+n al servidor el servidor devuelve una respuesta y entonces ni el nave$ador ni el servidor tiene cual/uier obli$aci+n para conservar cual/uier memoria de la transacci+n" 0ste acomodamiento simple marc5a bien para recuperar informaci+n bsica pero es poco satisfactorio para aplicaciones del lado del servidor" #a sesi+n el rastreo con cookies es completamente transparente al desarrollador web y las eti/uetas estndar JSF automticamente reescriben 'B# si un cliente no usa cookies" 0l mbito de sesi+n permanece desde /ue la sesi+n es establecida 5asta /ue esta termina" 'na sesi+n termina si la aplicaci+n web invoca el m6todo invalidate en el objeto AttpSession o si su tiempo e.pira" #as aplicaciones 1eb t%picamente colocan la mayor parte de sus bean dentro de un mbito de sesi+n" @mbito de tipo aplicaci+n& )ersiste durante toda la aplicaci+n web" 0ste mbito compartido entre todas las peticiones y sesiones" 8Cestion de usuarios en jsf