Aurelio Martín Obando Távaraaot@upnorte.edu.peproyectos iNAVEGACIÓN Y PARÁMETROS
EnalteciendoLos Temas132NavegaciónEstáticaBeans AdministradosNavegaciónDinámica
AGENDA - Nuevas características de JSF 2.0- Navegación estática- Navegación dinámica- Beans Administrados- ResumenClase 021
2CONTENIDO
JSF 2.0 básicoFacelets son la nueva manera estándar de crear JSP’s.	Navegación entre páginas usando parámetros 	predeterminados y personalizados.	Los beans administrados con anotaciones reemplazan 	propiedades en el archivo faces-config.	Soporteajax.Más adelante…	Validaciones	Plantillas de páginasNuevas características de JSF 2.0
La ideaHacer clic en un botón dentro de una página inicial.	Obtener siempre la misma página de resultado al hacer 	el clic.	Sincontenido dinámico.Lo necesario	Propiedades básicas web.xmlpatrón-url y la propiedad PROJECT_STAGEfaces-config.xml		Etiquetas de apertura y cierre, pero sin cuerpo	Una página inicialarchivo: test.xhtml; URL: test.jsf		Contiene <h:commandButton action=“successful-test” />	Una página de resultadosuccessful-test.xhtml, donde la parte principal del 			nombre del archivo corresponde al action mencionado 			arribaNavegación estática
web.xmlDebe ser una versión mayor a 2.5. Glassfish soporta servlets versión 3.0Brinda mayor detalle en los mensajes de error. Esto es opcional y nuevo en JSF 2.0 Esto es lo mismo que en JSF 1.XPatrón que obedece el Contexto Faces. Otras opciones populares son *.faces o /faces/*
faces-config.xmlDurante el ejemplo, este archivo casi siempre estará vacío.  Este ejemplo simple usa páginas de resultado por defecto (derivadas del valor del atributo “action” del botón) y nunca beans administrados.Sin embargo, es imprescindible que este archivo exista y contenga las etiquetas de apertura y cierre legales tal como se muestra en la imagen.
test.xhtmlEl action usualmente es #{algunBean.algunMetodo}, donde algunMetodo devuelve un String que es el outcome. Pero  también se puede poner un outcome literal aquí.De un modo u otro, el outcome corresponde al nombre de la página de resultado a menos que se cree una regla de navegación en el faces-config.xml. En conclusión, cuando se presione el botón, la página successful-test.xhtml(del mismo folder que test.xhtml) se visualizará.
ResultadoNótese que la URL es test.jsf en los tres casos. Para la página inicial , se usa aparece la URL test.jsf debido a que el nombre es test.xhtml y el patrón-url en el web.xml es *.jsf. Para las páginas de resultado, JSF (por defecto) usa forwarding, no redirecting, de este modo la URL no cambia cuando se envía el formulario. El mensaje de error en la página de fallos se debe a que usamos Development como PROJECT_STAGE en web.xml. De otro modo, la página inicial se hubiera mostrado sin mensajes.
La ideaHacer clic en un botón dentro de una página inicial.	Obtener una de dos páginas de resultado, escogidaaleatoriamente.Lo necesarioweb.xml y faces-config.xml tal como antes	Una página inicialarchivo: health-plan-signup-1.xhtml y contiene<h:commandButton action=“#{healthPlanBean.signup}” />	Un bean administradoNombre: HealthPlanBeanAnotación @ManagedBean		Contiene un método “signup” que retorna dos posibles 			Strings	Dos páginas de resultados		Los nombres corresponden a los valores de retornoNavegación dinámica con páginas de resultado
health-plan-signup-1.xhtmlLa misma cabecera que en JSF 1.x. Pero en JSF 2.0, faceletes son la  manera estándar de hacer JSP’s.No es necesario usar <h:body> o <h.head> en este ejemplo, sin embargo cuando se utilice <h:outputScript> y especialmente <f:ajax>, se requerirá estas etiquetas.Los elementos de entrada son ignorados en este ejemplo simplón. Más adelante se estudiará el atributo “value”.El mismo formato que en JSF 1.X. Pero el nombre del bean administrado se deriva del nombre de la clase Java
HealthPlanBean.javaDeclarar esta clase como Managed Bean evita una entrada en el archivo faces-config.Debido a que no se le está pasando un nombre en el atributo “name”, el nombre del Managed Bean es el nombre de la clase Java con la primera letra en minúscula.Debido a que no se le está indicando un alcance. El alcance por defecto es Request Scope. Tambié se podría usar una anotación como @SessionScoped.Estos valores corresponden a las páginas accepted.xhtml y rejected.xhtml.
Resultados de páginarejected.hxtmlaccepted.hxtml
Resultado
La idea (la misma que antes)Hacer clic en un botón dentro de una página inicial.	Obtener una de dos páginas de resultado, escogidaaleatoriamente.Lo necesario	Nuevo en este ejemplonavigation-rule in faces-config.xml que mapea 			los outcomes (valores de retorno de algún 			método) a páginas de resultado	Lo mismo que en los ejemplos anteriores		web.xml, página inicial, bean administrado y 			páginas de resultadoNavegación dinámica con mapeo explícito de páginas de resultado
faces-config.xmlPágina inicialValores de retorno de los métodos Java que se ejecuta cuando el formulario de la página inicial es enviado.Páginas de resultado que corresponden a los outcomes.Estas reglas de navegación son exactamente iguales que en JSF 1.X.
health-plan-signup-2.xhtmlEsta página es idéntica a la página health-plan-signuo-1.xhtml.
HealthPlanBean.javaEl mismo bean administrado que en el ejemplo anterior.La diferencia radica en que los valores de retorno del método signup() están mapeados a unas página de resultados explícitamente en el faces-config.xml.
Resultados de páginapage-for-rejected.hxtmlpage-for-accepted.hxtml
Resultado
La ideaIngresar el código de un cliente de banco y su 	contraseña.Obtener ya sea.Una página que muestre el primer nombre, apellido y 			balance.Distintas versiones dependiendo del balance.Mensaje de error acerca del ingreso de datos.Lo necesario	Nuevo en este ejemploBean: propiedades correspondientes a los parámetros de 			request	Formulario de entrada:  atributo de “valor” para 				h:inputText	Páginas de resultado:  #{miBean.miPropiedad}	Lo mismo que en los ejemplos anterioresweb.xml, faces-config.xmlUsando Beans Administrados para manejar parámetros de Request
bank-lookup.xhtmlEste valor juega un doble rol.  Cuando el formulario es mostrado por primera vez, bankinBean es instanciado y getCustomerIdes llamado. Si el valor es diferente de vacío, ese resultado es el valor inicial de la caja de texto. De otro modo,  la caja de texto aparecerá vacía.Cuando el formulario es enviado, bankingBean es instanciado nuevamente (asumiendo por defecto RequestScope) y  el valor ingresado en la caja de texto es pasado a setCutomerId.
BankingBean.javaEstos métodos serán llamados automáticamente  por JSF cuando el formulario sea enviado.El customeres inicialmente null. Dependiendo del dato ingresado, el bean administrado buscará un customer.
BankingBean.java (continuado)Llenados por JSF antes que el método showBalancePage() sea invocado.El customer no es llenado automáticamente por JSFdebido a que no es parte directa de los datos enviados, pero obtenido indirectamente de los datos ingresados. De este modo, customer es llenado por el método showBalancePage()  a través de la lógica de negocio.Existen 5 posiblesresultados de página: wrong-password.xhtml, unknown-customer.xhtml, negative-balance.xhtml, normal-balance.xhtml, and high-balance.xhtml. Se estáusando el mapeopordefecto de valores de retorno a nombres de archivos en todos los casos (en lugar de reglas de navegaciónexplícitas en faces-config.xml).
normal-balance.xhtmlNótese que en JSF 2.0 se puede usar #{result} en vez de <h:outputText value="#{result}"/>. En ambos casos se obvia los caracteres  HTML, entonces úsese la forma más corta mostrada aquí a menos que se necesite una de las siguientes opciones:h:outputText con el atributo“escape”igual a false, con el atributo“rendered” con un valor calculado, id, converter, etc.negative-balance.xhtmly high-balance.xhtmlson similares.
unknown-customer.xhtmlAunque customerId venga del usuario y pueda contener caracteres HTML, es seguro usar #{bankingBean.customerId} en vez de <h:outputText value="#{bankingBean.customerId}"/>.unknown-password.xhtmlessimilar.
Resultado
Resultado
3Resumen
RESUMENFacelets en todas las páginas
Usar xhtml con xmlns:h=“http://java.sun.com/jsf/html”
Siempre usar h:head, h:body y h:form

P1C2 Navegación y Parámetros

  • 1.
    Aurelio Martín ObandoTávaraaot@upnorte.edu.peproyectos iNAVEGACIÓN Y PARÁMETROS
  • 2.
  • 3.
    AGENDA - Nuevascaracterísticas de JSF 2.0- Navegación estática- Navegación dinámica- Beans Administrados- ResumenClase 021
  • 4.
  • 5.
    JSF 2.0 básicoFaceletsson la nueva manera estándar de crear JSP’s. Navegación entre páginas usando parámetros predeterminados y personalizados. Los beans administrados con anotaciones reemplazan propiedades en el archivo faces-config. Soporteajax.Más adelante… Validaciones Plantillas de páginasNuevas características de JSF 2.0
  • 6.
    La ideaHacer clicen un botón dentro de una página inicial. Obtener siempre la misma página de resultado al hacer el clic. Sincontenido dinámico.Lo necesario Propiedades básicas web.xmlpatrón-url y la propiedad PROJECT_STAGEfaces-config.xml Etiquetas de apertura y cierre, pero sin cuerpo Una página inicialarchivo: test.xhtml; URL: test.jsf Contiene <h:commandButton action=“successful-test” /> Una página de resultadosuccessful-test.xhtml, donde la parte principal del nombre del archivo corresponde al action mencionado arribaNavegación estática
  • 7.
    web.xmlDebe ser unaversión mayor a 2.5. Glassfish soporta servlets versión 3.0Brinda mayor detalle en los mensajes de error. Esto es opcional y nuevo en JSF 2.0 Esto es lo mismo que en JSF 1.XPatrón que obedece el Contexto Faces. Otras opciones populares son *.faces o /faces/*
  • 8.
    faces-config.xmlDurante el ejemplo,este archivo casi siempre estará vacío. Este ejemplo simple usa páginas de resultado por defecto (derivadas del valor del atributo “action” del botón) y nunca beans administrados.Sin embargo, es imprescindible que este archivo exista y contenga las etiquetas de apertura y cierre legales tal como se muestra en la imagen.
  • 9.
    test.xhtmlEl action usualmentees #{algunBean.algunMetodo}, donde algunMetodo devuelve un String que es el outcome. Pero también se puede poner un outcome literal aquí.De un modo u otro, el outcome corresponde al nombre de la página de resultado a menos que se cree una regla de navegación en el faces-config.xml. En conclusión, cuando se presione el botón, la página successful-test.xhtml(del mismo folder que test.xhtml) se visualizará.
  • 10.
    ResultadoNótese que laURL es test.jsf en los tres casos. Para la página inicial , se usa aparece la URL test.jsf debido a que el nombre es test.xhtml y el patrón-url en el web.xml es *.jsf. Para las páginas de resultado, JSF (por defecto) usa forwarding, no redirecting, de este modo la URL no cambia cuando se envía el formulario. El mensaje de error en la página de fallos se debe a que usamos Development como PROJECT_STAGE en web.xml. De otro modo, la página inicial se hubiera mostrado sin mensajes.
  • 11.
    La ideaHacer clicen un botón dentro de una página inicial. Obtener una de dos páginas de resultado, escogidaaleatoriamente.Lo necesarioweb.xml y faces-config.xml tal como antes Una página inicialarchivo: health-plan-signup-1.xhtml y contiene<h:commandButton action=“#{healthPlanBean.signup}” /> Un bean administradoNombre: HealthPlanBeanAnotación @ManagedBean Contiene un método “signup” que retorna dos posibles Strings Dos páginas de resultados Los nombres corresponden a los valores de retornoNavegación dinámica con páginas de resultado
  • 12.
    health-plan-signup-1.xhtmlLa misma cabeceraque en JSF 1.x. Pero en JSF 2.0, faceletes son la manera estándar de hacer JSP’s.No es necesario usar <h:body> o <h.head> en este ejemplo, sin embargo cuando se utilice <h:outputScript> y especialmente <f:ajax>, se requerirá estas etiquetas.Los elementos de entrada son ignorados en este ejemplo simplón. Más adelante se estudiará el atributo “value”.El mismo formato que en JSF 1.X. Pero el nombre del bean administrado se deriva del nombre de la clase Java
  • 13.
    HealthPlanBean.javaDeclarar esta clasecomo Managed Bean evita una entrada en el archivo faces-config.Debido a que no se le está pasando un nombre en el atributo “name”, el nombre del Managed Bean es el nombre de la clase Java con la primera letra en minúscula.Debido a que no se le está indicando un alcance. El alcance por defecto es Request Scope. Tambié se podría usar una anotación como @SessionScoped.Estos valores corresponden a las páginas accepted.xhtml y rejected.xhtml.
  • 14.
  • 15.
  • 16.
    La idea (lamisma que antes)Hacer clic en un botón dentro de una página inicial. Obtener una de dos páginas de resultado, escogidaaleatoriamente.Lo necesario Nuevo en este ejemplonavigation-rule in faces-config.xml que mapea los outcomes (valores de retorno de algún método) a páginas de resultado Lo mismo que en los ejemplos anteriores web.xml, página inicial, bean administrado y páginas de resultadoNavegación dinámica con mapeo explícito de páginas de resultado
  • 17.
    faces-config.xmlPágina inicialValores deretorno de los métodos Java que se ejecuta cuando el formulario de la página inicial es enviado.Páginas de resultado que corresponden a los outcomes.Estas reglas de navegación son exactamente iguales que en JSF 1.X.
  • 18.
    health-plan-signup-2.xhtmlEsta página esidéntica a la página health-plan-signuo-1.xhtml.
  • 19.
    HealthPlanBean.javaEl mismo beanadministrado que en el ejemplo anterior.La diferencia radica en que los valores de retorno del método signup() están mapeados a unas página de resultados explícitamente en el faces-config.xml.
  • 20.
  • 21.
  • 22.
    La ideaIngresar elcódigo de un cliente de banco y su contraseña.Obtener ya sea.Una página que muestre el primer nombre, apellido y balance.Distintas versiones dependiendo del balance.Mensaje de error acerca del ingreso de datos.Lo necesario Nuevo en este ejemploBean: propiedades correspondientes a los parámetros de request Formulario de entrada: atributo de “valor” para h:inputText Páginas de resultado: #{miBean.miPropiedad} Lo mismo que en los ejemplos anterioresweb.xml, faces-config.xmlUsando Beans Administrados para manejar parámetros de Request
  • 23.
    bank-lookup.xhtmlEste valor juegaun doble rol. Cuando el formulario es mostrado por primera vez, bankinBean es instanciado y getCustomerIdes llamado. Si el valor es diferente de vacío, ese resultado es el valor inicial de la caja de texto. De otro modo, la caja de texto aparecerá vacía.Cuando el formulario es enviado, bankingBean es instanciado nuevamente (asumiendo por defecto RequestScope) y el valor ingresado en la caja de texto es pasado a setCutomerId.
  • 24.
    BankingBean.javaEstos métodos seránllamados automáticamente por JSF cuando el formulario sea enviado.El customeres inicialmente null. Dependiendo del dato ingresado, el bean administrado buscará un customer.
  • 25.
    BankingBean.java (continuado)Llenados porJSF antes que el método showBalancePage() sea invocado.El customer no es llenado automáticamente por JSFdebido a que no es parte directa de los datos enviados, pero obtenido indirectamente de los datos ingresados. De este modo, customer es llenado por el método showBalancePage() a través de la lógica de negocio.Existen 5 posiblesresultados de página: wrong-password.xhtml, unknown-customer.xhtml, negative-balance.xhtml, normal-balance.xhtml, and high-balance.xhtml. Se estáusando el mapeopordefecto de valores de retorno a nombres de archivos en todos los casos (en lugar de reglas de navegaciónexplícitas en faces-config.xml).
  • 26.
    normal-balance.xhtmlNótese que enJSF 2.0 se puede usar #{result} en vez de <h:outputText value="#{result}"/>. En ambos casos se obvia los caracteres HTML, entonces úsese la forma más corta mostrada aquí a menos que se necesite una de las siguientes opciones:h:outputText con el atributo“escape”igual a false, con el atributo“rendered” con un valor calculado, id, converter, etc.negative-balance.xhtmly high-balance.xhtmlson similares.
  • 27.
    unknown-customer.xhtmlAunque customerId vengadel usuario y pueda contener caracteres HTML, es seguro usar #{bankingBean.customerId} en vez de <h:outputText value="#{bankingBean.customerId}"/>.unknown-password.xhtmlessimilar.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
    Usar xhtml conxmlns:h=“http://java.sun.com/jsf/html”
  • 33.
    Siempre usar h:head,h:body y h:form
  • 34.
    Para páginas deresultado, usar usualmente #{blah} en vez de <h:outputText value=“#{blah}” />
  • 35.
  • 36.
    El valor deretorno de los métodos del bean administrado es el nombre de las páginas de resultado. (menos la extensión .xhtml)
  • 37.
    Nombre del beanadministrado
  • 38.
  • 39.
    Si el nombrede la clase es MiBeanAdministrado, usar #{miBeanAdministrado.blah}GRACIAS
  • 40.
    Encuentra esta presentaciónen elAULA VIRTUAL O tambiénpuedesencontrarlaen . Saludos!