5. JSF 2.0 básico Facelets 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áginas Nuevas características de JSF 2.0
6. La idea Hacer 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.xml patrón-url y la propiedad PROJECT_STAGE faces-config.xml Etiquetas de apertura y cierre, pero sin cuerpo Una página inicial archivo: test.xhtml; URL: test.jsf Contiene <h:commandButton action=“successful-test” /> Una página de resultado successful-test.xhtml, donde la parte principal del nombre del archivo corresponde al action mencionado arriba Navegación estática
7. web.xml Debe ser una versión mayor a 2.5. Glassfish soporta servlets versión 3.0 Brinda mayor detalle en los mensajes de error. Esto es opcional y nuevo en JSF 2.0 Esto es lo mismo que en JSF 1.X Patrón que obedece el Contexto Faces. Otras opciones populares son *.faces o /faces/*
8. faces-config.xml Durante 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.xhtml El 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á.
10. Resultado Nó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.
11. La idea Hacer clic en un botón dentro de una página inicial. Obtener una de dos páginas de resultado, escogidaaleatoriamente. Lo necesario web.xml y faces-config.xml tal como antes Una página inicial archivo: health-plan-signup-1.xhtml y contiene <h:commandButton action=“#{healthPlanBean.signup}” /> Un bean administrado Nombre: HealthPlanBean Anotación @ManagedBean Contiene un método “signup” que retorna dos posibles Strings Dos páginas de resultados Los nombres corresponden a los valores de retorno Navegación dinámica con páginas de resultado
12. health-plan-signup-1.xhtml La 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
13. HealthPlanBean.java Declarar 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.
16. 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 ejemplo navigation-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 resultado Navegación dinámica con mapeo explícito de páginas de resultado
17. faces-config.xml Página inicial Valores 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.
19. HealthPlanBean.java El 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.
22. La idea Ingresar 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 ejemplo Bean: 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 anteriores web.xml, faces-config.xml Usando Beans Administrados para manejar parámetros de Request
23. bank-lookup.xhtml Este 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.
24. BankingBean.java Estos 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.
25. 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).
26. normal-balance.xhtml Nó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.
27. unknown-customer.xhtml Aunque 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.