Sie sind auf Seite 1von 70

JSF

Aplicaciones Distribuidas

Contenidos
! Introduccin ! Arquitectura ! Componentes UI ! Renders ! Eventos ! Validadores ! Backing beans
2

! Internacionalizacin ! Conversores ! Navegacin ! Ciclo de Vida ! Fichero configuracin

Introduccin
! JavaServer Faces es una especificacin que define un framework web para la creacin de aplicaciones ! Permite:
! ! ! ! ! ! gestin de componentes grficos manejo de eventos en el servidor validacin de entradas de usuario asociacin entre el modelo de datos y el interfaz de usuario gestin del flujo entre pginas etc
3

! Necesidad de adoptar el concepto RAD para desarrollar aplicaciones web. ! En las herramientas RAD observamos cuatro capas:
! ! ! ! una arquitectura de componentes subyacente un conjunto de artilugios o widgets estndar una infraestructura de aplicacin la herramienta en s misma.

! JavaServer Faces define tres capas:


! una arquitectura de componentes, ! un conjunto estndar de widgets (literalmente artefactos, aunque son componentes) de interfaz de usuario (UI) ! una infraestructura de aplicacin.

! La arquitectura de componentes de JSF define un modo comn de construir componentes de interfaz de usuario. ! Proporciona componentes de interfaz de usuario (botones, hiperenlaces, checkboxes, campos de texto, etc), pero tambin establece la base para componentes de terceros. 5

! Los componentes estn orientados a eventos, as que JSF permite procesar eventos generados por el cliente (por ejemplo, cambiando el valor de un campo de texto o haciendo click sobre un botn). ! Debido a que las aplicaciones basadas en web, a diferencia de las de escritorio, deben con frecuencia satisfacer a mltiples clientes (como navegadores de escritorio, telfonos mviles, o PDAs), JSF tiene una arquitectura capaz de mostrar componentes de diferentes maneras. ! Tambin tiene facilidades extensibles para validar entradas (la longitud de un campo, por ejemplo) y convertir objetos a y desde cadenas de texto o strings.
6

! JSF se ejecuta en el servidor, en un contenedor de servlets y muestra cdigo HTML u otro lenguaje de marcas al cliente.
! Si se pulsa un botn en una aplicacin Swing, se disparar un evento que se puede manejar directamente en el cdigo que reside en el escritorio. ! Pero, los navegadores web no saben nada sobre componentes JSF o eventos, slo saben cmo mostrar HTML.

! Cuando se hace click en un botn de una aplicacin JavaServer Faces, se genera una peticin para ser enviada desde el navegador web al servidor ! JSF es responsable de traducir la peticin a un evento que puede ser procesado por la lgica de la aplicacin en el servidor. ! Tambin es responsable de asegurarse de que todo componente de interfaz de usuario definido en el servidor, se muestre apropiadamente en el navegador.
8

! Principales elementos de la tecnologa JavaServer Faces son: ! Un API y una implementacin de referencia para representar componentes de interfaz de usuario (UI) y manejar su estado, manejar eventos, validar en el lado del servidor y aplicar una conversin de datos, definir la navegacin entre pginas, soportar internacionalizacin y accesibilidad y proporcionar extensibilidad para todas estas caractersticas. ! Una librera de etiquetas JavaServer Pages (JSP) personalizadas para dibujar componentes UI dentro de una pgina JSP.

Desarrollo de Aplicaciones Distribuidas

! Permite:
! Conectar eventos generados en el cliente a cdigo de la aplicacin en el lado del servidor. ! Mapear componentes de interface de usuario a una pgina de datos del lado del servidor. ! Construir un interface de usuario con componentes reutilizables y extensibles. ! Grabar y restaurar el estado del interface de usuario ms all de la vida de las peticiones de servidor.

10

Tecnologas subyacentes
! Todas las aplicaciones JSF son aplicaciones web Java estndar.
! Protocolo HTTP mediante el API Servlet y algn conjunto de tecnologas de visualizacin como JSP

! La tecnologa de visualizacin se usa para definir componentes de UI (componentes que interactan con cdigo Java).

11

! La arquitectura de componentes de JSF se vale de beans de respaldo o backing beans (JavaBeans) para propiedades y manejo de eventos
! Los JavaBeans son componentes Java que se utilizan para crear los componentes de UI de JSF ! JSF usa HTTP que es sin estado
! JSF permite abstraer a los programadores de este protocolo (no maneja directamente peticiones y respuestas)
12

! !

Los componentes de JavaServer Faces estn diseados para trabajar con backing beans. Un backing beans define las propiedades y la lgica de manejo asociadas con los componentes de interface de usuario utilizados en una pgina. Cada propiedad del bean est unida a un componente o a su valor. Un backing beans tambin define un conjunto de mtodos que realizan funciones para el componente (p.e. validar los datos del componente, manejar los eventos que dispara el componente, y realizar el procesamiento asociado con la navegacin entre pginas cuando el componente se activa)
13

! !

! Uno de los principales objetivos de JSF es el de evitar estar ligado a una tecnologa de visualizacin concreta. ! Tanto JSP como JSF son tecnologas Java estndar. ! La implementacin de referencia JSF viene con una implementacin de JSP y JSF trabaja sobre JSP. ! En JSF 2.0 se sustituye JSP por Facelets

14

Patrn Modelo-VistaControlador
! JavaServer Faces emplea una variacin de MVC ! Model-2 (especfica para web): ! El modelo puede constar de objetos Java de toda la vida (POJOs), EJBs, u otra cosa. ! La vista pueden ser JSPs u otra tecnologa de visualizacin. ! El controlador se implementa siempre como un servlet. ! El controlador JSF es un servlet FrontController llamado FacesServlet ! Emplea ficheros de configuracin y un conjunto de manejadores de accin (Action Handlers).
15

! El FacesServlet recibe peticiones de clientes web y ejecuta un conjunto lgico de pasos para preparar y servir una respuesta ! Un action handler es simplemente un mtodo de un JavaBean que no tiene parmetros y retorna un String. resultado
! Retorna un (como por ejemplo xito o fallo).

! El fichero de configuracin define el flujo de interfaces de usuario, entre otras cosas.


16

17

Arquitectura
! Elementos de la arquitectura:
! Componente UI: Un objeto con estado, mantenido en el servidor, que proporciona funcionalidad especfica para interactuar con un usuario final. Son javabeans con propiedades, mtodos y eventos. Organizados en una vista (rbol de componentes visualizado como una pgina). ! Renderer: Responsable de mostrar un componente UI y traducir una entrada de usuario al valor del componente. Los renderers pueden ser diseados para trabajar con uno o ms componentes UI, y un componente UI se puede asociar con muchos renderers diferentes. ! Validador: Responsable de asegurar que el valor introducido por un usuario es aceptable. Uno o ms validadores pueden ser asociados con un sencillo componente UI. ! Backing beans: Javabeans especializados que coleccionan valores de componentes UI e implementan mtodos oyentes de eventos. Tambin pueden mantener referencias a componentes UI.
18

! Conversores: Convierte el valor de un componente a/desde un String para visualizar. Un componente UI puede ser asociado con un convertidor sencillo. ! Events y listeners (eventos y oyentes): JSF utiliza el modelo evento/oyente de javabeans (tambin utilizado por Swing). Los componentes UI (y otros objetos) generan eventos, y pueden registrarse oyentes para manejar esos eventos. ! Mensajes e internacionalizacin: La informacin que se visualiza de vuelta al usuario. Cualquier parte de la aplicacin (beans de respaldo, validadores, convertidores, etc) pueden generar informacin o mensajes de error que pueden ser mostrados al usuario. ! Navegacin: La habilidad de moverse de una pgina a la siguiente. JSF tiene un potente sistema de navegacin que est integrado con oyentes de evento especializados.
19

20

Los componentes de interface de usuario, que estn contenidos en una vista, actualizan beans y generan eventos basados en entradas de usuario. Los renderers muestran componentes, y tambin pueden generar eventos y mensajes. Los convertidores traducen y formatean el valor de un componente para la visualizacin, y tambin generan mensajes de error. Los validadores verifican el valor de un componente y generan mensajes de error. Los beans contienen oyentes de evento y mtodos de accin, que son oyentes de evento que estn especializados en la navegacin. Los oyentes de evento consumen eventos y pueden manipular la vista o ejecutar objetos del modelo, que desempean la lgica de la aplicacin
21

! ! ! ! !

! Los mtodos de accin pueden hacer todo lo que los oyentes de evento pueden hacer, pero tambin devuelven un resultado que es usado por el sistema de navegacin. ! El sistema de navegacin usa este resultado para seleccionar la siguiente vista a mostrar al usuario. ! La mayora de los elementos generan un mensaje o un evento (as es como JSF se comunica).
! Los eventos representan entradas de usuario u operaciones de la aplicacin. ! Los mensajes indican errores o notificaciones de la aplicacin.

22

Componentes UI
! Objetos con estado, mantenidos en el servidor, que proporcionan funcionalidad especfica para la interaccin con el usuario final ! Se construyen sobre la base de javabeans ! Se ejecutan en el lado del servidor, no en el cliente ! Estrategia de desarrollo basado en componentes (RAD) ! El aspecto de un componente es la manera en la que se renderiza (diferentes visualizaciones para un mismo componente)

23

! Los componentes UI tienen que recordar sus valores, o estado. Los componentes JSF gestionan esto automticamente evitando esa tarea al desarrollador. ! Los componentes JSF pueden recordar valores entre peticiones porque el framework mantiene un rbol de componentes de interface de usuario para una pgina en particular ! El rbol de componentes, llamado vista, es la representacin interna de la pgina JSF
! Utilizar Vista en lugar de Pgina subraya el hecho de que la representacin del usuario no tiene que ser una pgina web HTML siempre
24

25

! Cada componente en el rbol se identifica con un identificador de componente. ! El identificador componente puede ser establecido por el desarrollador, y si no se establece ninguno, ser generado automticamente.

26

Desarrollo de Aplicaciones Distribuidas

Renderers
! Se encargan de la visualizacin grfica de un componente ! JSF proporciona un render kit estndar para HTML 4.01
! Otros render kit podran generar un look and feel diferente: WML, SVG, etc..

! Se separa el concepto de componente del concepto de renderer


! P.E.: un componente UICommand puede representarse como un hipervnculo HTML o como un botn HTML. ! En JSP, el tipo de renderer se indica mediante la incrustacin de una etiqueta especfica de tipo de render
! p.e.: <commandHyperlink/> y <commandButton/>

27

28

29

! JSF tiene un render kit por defecto, (se expone a travs de la propiedad renderKitId):
! public String getDefaultRenderKitId(); ! public void setDefaultRenderKitId(String renderKitId);

! Se configura en el fichero de configuracin JSF, y el valor por defecto es HTML_BASIC


! RenderKitFactory.HTML_BASIC_RENDER_KIT

! El desarrollador puede personalizar los Renderers de un RenderKit existente o crear su propio RenderKit ! El desarrollador puede definir un componente personalizado
30

Eventos
! JSF utiliza el modelo de eventos y oyentes (event/ listener) de javabeans. ! Los componentes de interface de usuario y otros componentes generan eventos y oyentes que pueden ser registrados para manejar esos eventos ! JSF integra la lgica de aplicacin asignando los oyentes apropiados a componentes que generan los eventos que los oyentes comprenden (no hay peticiones y respuestas)
31

! Hay cuatro eventos estndar: ! eventos de cambio de valor (value-change events): se disparan cuando el usuario cambia el valor de un componente que es un control de entrada. ! eventos de accin (action events): se generan cuando un usuario activa un componente de comando como un botn. ! eventos de modelo de datos (data model events): se disparan cuando un componente de datos selecciona una fila para procesamiento. ! eventos de fase (phase events): se ejecutan cuando JSF procesa una peticin HTTP
32

! JSF Expression Language (EL)


! Basado en el EL incluido en JSP 2.0 ! EL proporciona un conjunto de objetos implcitos que permiten al desarrollador acceder a parmetros de la peticin, cabeceras HTTP, etc. ! Se puede utilizar EL para sentencias lgicas y matemticas, y tambin es posible mezclar valores literales con expresiones

33

! Diferencias entre JSF EL y JSP 2.0 EL:


! JSF utiliza el signo (#) para marcar el principio de una expresin, en vez del smbolo ($). ! Las expresiones JSF pueden ser tambin de dos vas. En otras palabras pueden o recuperar el valor de una propiedad o actualizarla. ! JSF EL tambin te permite referenciar mtodos de objetos. ! Algunas caractersticas especficas de JSP no estn disponibles, como el mbito de pgina. ! Las funciones JSP EL no estn soportadas oficialmente

34

! Se puede utilizar JSF EL para enlazar componentes a objetos que exponen propiedades javabean, colecciones, y tipos de datos sencillos. ! EL puede tambin ser utilizado para referenciar mtodos y crear sentencias lgicas o numricas. Tambin soporta sentencias anidadas

35

Eventos de cambio de valor


! Se gestiona con oyentes valuechange.
<h:inputText valueChangeListener="#{myForm.processValueChanged}"/> <h:panelGrid binding="#{myForm.changePanel}" rendered="false"> ... </h:panelGrid> public void processValueChanged(ValueChangeEvent event){ HtmlInputText sender = (HtmlInputText)event.getComponent(); sender.setReadonly(true); changePanel.setRendered(true); }

! El mtodo oyente del evento cambiar la propiedad readOnly del emisor (en este caso, el componente HtmlInputText) a true de modo que el usuario no pueda editar su contenido. ! Entonces cambiar la propiedad rendered del componente HtmlPanelGrid (que est ligada a la propiedad changePanel) a true de modo que ser visible cuando la pgina es redibujada.
36

Eventos de accin
! Los componentes que generan eventos de accin, tambin llamados action sources, incluyen controles como botones o hiperenlaces. ! Los eventos de accin se manejan por oyentes de accin (action listeners) ! Dos tipos de oyentes de accin: los que afectan a la navegacin, y los que no:
! Los que afectan a la navegacin generalmente llevan a cabo algn tipo de procesamiento y luego devuelven un resultado lgico que usa el sistema de navegacin de JSF para seleccionar la siguiente pgina ! Los que no afectan a la navegacin generalmente manipulan componentes en la vista en curso, o llevan a cabo algn procesamiento que cambia objetos de modelo o propiedades del beans, pero no modifican la pgina en curso a la que el usuario est accediendo
37

! Los oyentes de accin delegan todo su trabajo a mtodos de accin (action methods) en beans, as que el desarrollador puede tener mtodos de accin diferentes manejando partes diferentes de su aplicacin ! Cuando un componente dispara un evento de accin, este oyente de accin por defecto determina su cadena de resultado, por ejemplo: menuprincipal, exito, fallo.
38

! Dos tipos bsicos de salidas: esttica y dinmica


! Las salidas estticas son cadenas constantes que se declaran con el componente
<h:commandButton type="submit" value="Login" action="exito immediate="true"/>

! Las salidas dinmicas son cadenas devueltas por mtodos de accin


<h:commandButton type="submit" value="Login" action="#{loginForm.login}"/> public class LoginForm { public String login() { if (...) {return "exito";} else { return "fallo";} }

39

! Cuando se necesita ejecutar lgica de aplicacin que no est asociada con la navegacin, puede asociar un mtodo oyente de accin con un componente.
! los oyentes de accin tienen acceso al componente que dispar el evento (mediante event)
<h:commandButton id="redisplayCommand" type="submit" value="Redisplay actionListener="#{miForm.doIt}"/> public void doIt(ActionEvent event){ HtmlCommandButton button = (HtmlCommandButton)event.getComponent(); button.setValue("Hecho!"); }
40

Eventos de modelo de datos


! Ejemplo: componentes que muestran una lista de elementos en una tabla, como por ejemplo un HtmlDataTable ! Sus oyentes de evento deben implementar una interface Java ! Los eventos son disparados por una instancia DataModel, que es un objeto de modelo usado internamente por componentes relacionados con datos ! DataModel son envolturas para listas, arrays, result sets, y otras fuentes de datos.

41

! Debido a que el evento es tcnicamente disparado por un objeto del modelo en lugar de por un componente, no se puede registrar un oyente sobre el componente mismo en JSP. ! Hay que registrarlo en el cdigo Java (clase interna annima)
FacesContext facesContext = FacesContext.getCurrentInstance(); dataTable = (HtmlDataTable) facesContext.getApplication().createComponent (HtmlDataTable.COMPONENT_TYPE) DataModel myDataModel = new ResultSetDataModel(myResultSet); myDataModel.addDataModelListener( new DataModelListener() { public void rowSelected(DataModelEvent e){ FacesContext.getCurrentInstance().getExternalContext().log("fila seleccionada:" + e.getRowIndex()); } }); dataTable.setValue(myDataModel);

42

Eventos de fase
! Siempre que una aplicacin JSF recibe una peticin, pasa a travs de un proceso de seis pasos denominado Ciclo de vida de Procesamiento de Peticin
! Durante este proceso, JSF restaura la visualizacin pedida, traduce los parmetros de peticin a valores componentes, realiza la validacin de entradas, actualiza beans de respaldo u objetos de modelo, invoca oyentes de accin, y devuelve una respuesta al usuario.

! Los eventos de fase se generan antes y despus de cada paso, o fase, de este ciclo de vida.
43

! Es necesario que se implemente una interface Java para registrar oyentes de evento
lifecycle.addPhaseListener( new PhaseListener(){ public void beforePhase(PhaseEvent event) {priceQuote = QuoteService.getLatestQuote(currentQuoteId);} public void afterPhase(PhaseEvent event){} Public PhaseId getPhaseId(){ return PhaseId.RENDER_RESPONSE; } })

! Ejemplo de registrar un oyente de fase que se ejecuta antes de que una vista sea mostrada
! Lifecycle representa al ciclo de vida del procesamiento de la peticin. ! La propiedad phaseId del oyente indica al ciclo de vida cundo debera procesar eventos (la fase Renderizar Respuesta).
44

Validadores
! ! ! Son los responsables de asegurar que los valores introducidos son aceptables. Se puede asociar uno o ms validadores al mismo componente de interface de usuario 3 formas de validacin:
! A nivel de componentes de interface de usuario (validadores estndares predefinidos): se usa para validaciones simples (p.e. como asegurar que se ha introducido un valor en un campo obligatorio) ! Mediante mtodos validadores en los beans (til cuando necesitamos validar uno o ms campos de un formulario y no queremos compartir esa lgica con otros componentes) ! Mediante clases validadoras (tiles para casos genricos como la longitud de un campo o el rango de un nmero).
45

! Validadores estndar (predefinidos) en JSF:


! campo con valor requerido ! validadores de la longitud de una cadena ! validadores de rango para enteros y decimales.

! Se pueden crear validadores propios ! Cuando un validador encuentra un error, aade un mensaje de error a la lista de mensajes actual, que es un componente que muestra mensajes relacionados con componentes o con la aplicacin.
46

! Ejemplos:
! validador estndar
<h:inputText id="userNumber" value="#{NumberBean.userNumber}" required="true"/>

! validador que recurre a un bean


<h:inputText id="emailInput" validator="# {registrationBean.validateEmail} value="#{registrationBean.email}/>

! Clases validadoras
<h:inputText id="age" value="#{resumeBean.age}" required="true">! !!!!!!!!!<f:validateLongRange minimum="16" maximum="64"/>! </h:inputText>!
47

Modelo (uso de beans)


! JavaServer Faces implementa una variante del Modelo Vista Controlador (MVC) denominada Modelo 2. ! Este modelo potencia la separacin entre la vista y el modelo, y la interaccin entre ambos que viene determinada por el controlador. ! El modelo vendra a estar formado por clases de acceso a bases de datos (DAO o Hibernate), EJB, servicios web, etc ! Los beans de respaldo son los objetos que realizan funcin del controlador: controlar la interaccin entre la interface de usuario y el modelo.
48

! Los beans generalmente contienen propiedades a recuperar y mtodos de oyentes de eventos, que procesan esas propiedades. ! Tambin pueden manipular la interface de usuario o realizar algn tipo de procesamiento en la aplicacin.
! Algunas herramientas de desarrollo generan clases bean de respaldo automticamente cuando se crea una nueva pgina.

49

! JSF permite asociar beans de respaldo con componentes de interfaz de usuario de forma declarativa (con marcas y no cdigo) ! Se asocia un componente con el bean de respaldo a travs del lenguaje de expresiones (EL) de JSF
<h:outputText id="helloBeanOutput" value="#{helloBean.numControls}"/>

! Cuando cambia el valor del componente, cambiar el valor del bean de respaldo y viceversa, porque ambos estn sincronizados.
50

! Se puede enlazar una propiedad de un componente con la de un bean de forma que se puede manipular la vista con cdigo Java

<h:panelGrid id=aControlPanel" binding="#{helloBean.controlPanel} columns="20" border="1" cellspacing="0"/> ! Dede el bean se puede manipular el componente, haciendo uso de la propiedad controlPanel.

51

Los beans son declarados en el fichero de configuracin (faces-config.xml): se puede especificar qu objetos estarn disponibles a lo largo del ciclo de vida de la aplicacin.
<managed-bean> <managed-bean-name>brokeUser</managed-bean-name> <managed-bean-class>org.jia.examples.UserBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>firstName</property-name> <value>Joe</value> </managed-property> <managed-property> <property-name>favoriteAnimal</property-name> <null-value/> </managed-property> </managed-bean>

O se puede declarar y crear la clase en codigo Java (.java)


<managed-bean>! <managed-bean-name>userBean</managed-bean-name>! <managed-bean-class>org.jia.examples.UserBean</managed-bean-class>! <managed-bean-scope>session</managed-bean-scope>! </managed-bean>

52

Internacionalizacin
! JSF conocer la localizacin del usuario mediante la aplicacin cliente (el navegador web indicar en las cabeceras HTTP las lenguas que soporta y la que tiene por defecto)
! Los cdigos de los idiomas se ponen en minscula, mediante cadenas de dos letras definidas por la Internacional Organization for Standardization (ISO).

53

! Tareas:
! 1 - Indicar en JSF (faces-config.xml) las lenguas que soporta y la regin en la que se aplican ! 2 - Crear al menos un fichero de recursos con las cadenas de texto en los lenguajes deseados ! 3 - Cargar el fichero de recursos y referenciar las cadenas de los ficheros de recursos en vez de escribirlas directamente en las pginas

54

! 1. Indicar JSF qu idiomas debera soportar.


! faces-config.xml
<application> <locale-config> <default-locale>es</default-locale> <supported-locale>en</supported-locale> <supported-locale>en_US</supported-locale> </locale-config> <message-bundle> MensajesPersonalizados </message-bundle> </application>

La lengua seleccionada en el cliente tiene preferencia y si no se esta en las indicadas con la etiqueta <locale-config> del cliente, se recurre a la lengua por defecto.
55

! 2. Crear ficheros de recursos ! Ficheros con el texto en los distintos lenguajes soportados
! resource bundles: Se componen de lneas formadas por los pares clave/valor. ! Igual nombre excepto por un sufijo que debe ser acorde con el lenguaje al que traduce y que precede a la extensin. ! Los mensajes contenidos en los ficheros se pueden parametrizar
MensajesPersonalizados_es.properties
halloween=Todos los das son como el Da de las Brujas. numberOfVisits=Nos ha visitado {0} veces, {1}. que buena onda! toggleLocale=Traducir a Ingles helloImage=../images/hola.gif

56

3. Cargar recursos y usar las cadenas contenidas ! Cargar el fichero de recursos (resource bundle) con el nombre que tienen en comn los ficheros de recursos de los diferentes idiomas, pero excluyendo el sufijo que indica el lenguaje concreto y la extensin
<f:loadBundle basename=" MensajesPersonalizados" var="bundle"/>

! Referenciar las cadenas


<h:outputFormat value="#{bundle.numberOfVisits}"> <f:param value="#{user.numberOfVisits}"/> <f:param value="#{user.firstName}"/> </h:outputFormat> 57

Conversores
! Convierten el valor de un componente desde y a una cadena para mostrar por la pantalla. ! Un componente de interface de usuario puede ser asociado con un nico conversor. ! Traducen un objeto a una cadena para visualizar, y desde una cadena de entrada en un objeto ! JSF tiene conversores para tipos comunes como fechas y nmeros
! Pero tambin podemos crear nuestros propios conversores

58

p.e.: Conversor de fecha:


<h:outputText value="#{user.dateOfBirth}"> <f:convertDateTime type="both" dateStyle="full"/> </h:outputText>

! !

JSF dispone de conversores por defecto si no se indica nada Formas de definir un conversor: ! Anidando (permite parametros):
<h:outputText value="#{user.dateOfBirth}"> <f:convertDateTime type="date" dateStyle="medium"/> </h:outputText>

! Atributo:
<h:outputText value="#{user.creditCardNumber}" converter="creditcard"/>

59

Navegacion
! ! ! La navegacin es la habilidad de pasar de una pgina a la siguiente. JSF tiene un sistema de navegacin que se integra con oyentes de eventos especializados. El manejador de navegacin (navigation handler) es el responsable de decidir qu pgina se va a cargar en base a la salida de un mtodo de accin. Para cualquier pgina dada, una regla de navegacin define qu salidas se pueden dar y qu pginas se deben cargar en base a esas salidas. La correspondencia entre una salida y una pgina se llama caso de navegacin (navigation case).
60

! !

! Las reglas de navegacin se expresan en el fichero de configuracin (faces-config.xml)


<navigation-rule> <from-view-id>/login.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/mainmenu.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>failure</from-outcome> <to-view-id>/login.jsp</to-view-id> </navigation-case> </navigation-rule>
61

Ciclo de vida
! Para entender cmo el framework enmascara la naturaleza del procesamiento de la peticin subyacente del API Servlet, es de gran ayuda analizar cmo JSF procesa cada peticin. ! El ciclo de vida de una pgina JSF es similar al de una pgina JSP: el cliente hace una peticin HTTP de la pgina y el servidor responde con la pgina traducida a HTML ! JSF proporciona algunos servicios adicionales mediante la ejecucin de algunos pasos extras
62

! Este proceso comienza tan pronto como se recibe una peticin por el servlet JSF ! Hay seis fases primarias (mostradas en los cuadrados sombreados), y despus de la mayora de ellas se procesan eventos (mostrados en cuadros blancos).

63

! Restore View ! JSF construye el rbol de componentes de la pgina JavaServer Faces, conecta los manejadores de eventos y los validadores y graba el estado en el FacesContext ! Apply Request Values ! Una vez construido el rbol de componentes, cada componente del rbol extrae su nuevo valor desde los parmetros de la peticin con su mtodo decode. Su valor se almacena localmente en el componente. ! Process Validations ! JSF procesa todas las validaciones registradas con los componentes del rbol
64

Update Model Values ! Una vez que JSF determina que el dato es vlido, puede pasar por el rbol de componentes y configurar los valores del objeto de modelo correspondiente con los valores locales de los componentes Invoke Application ! JSF maneja cualquier evento a nivel de aplicacin, como enviar un formulario o enlazar a otra pgina

Render Response ! JSF invoca las propiedades de codificacin de los componentes y dibuja los componentes del rbol de componentes grabado en el FacesContext.
65

Ficheros de configuracin
! En web.xml
<web-app> <display-name>Tienda</display-name> <description>Comprar un ordenador</description> <!-- Faces Servlet --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet </servlet-class> </servlet> <!-- Faces Servlet Mapping --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> </web-app> ! Tambien mapping a *.jsf y *.faces
66

! En faces-config.xml

67

68

Destacar el uso frecuente de: <application> <message-bundle>tiendadecoches.bundles.Messages</message-bundle> <locale-config> <default-locale>es</default-locale> <supported-locale>en</supported-locale> </locale-config> </application> <converter> <description>Registra la implementacin Converter concreta, tiendadecoches.CreditCardConverter utilizando el identificador creditcard. </description> <converter-id>creditcard</converter-id> <converter-class>tiendadecoches.CreditCardConverter</converter-class> </converter>
69

<managed-bean> <description> Para inicializar en la sesin el bean del usuario que utiliza la aplicacin </description> <managed-bean-name>usuario</managed-bean-name> <managed-bean-class> ejemplo.JDBCUsuarioDAO </managedbean-class> <managed-bean-scope>session</managed-bean-scope> <navigation-rule> <from-view-id>/login.jsp</from-view-id> <navigation-case> <description> Cualquier accin que retorna validado en login.jsp debera navegar a menu.jspx </description> <from-outcome>validado</from-outcome> <to-view-id>/menu.jspx</to-view-id> </navigation-case> <navigation-case> <description> Cualquier accin que retorna fallo en login.jsp debera navegar a errorEntrada.jsp </description> <from-outcome>fallo</from-outcome> <to-view-id>/errorEntrada.jsp</to-view-id> </navigation-case>

70

Das könnte Ihnen auch gefallen