Struts y JSF Sesión 4: Funcionamiento de JSF

28
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces 1 Struts y JSF Sesión 4: Funcionamiento de JSF Especialista en Aplicaciones y Servicios Web con Java Enterprise

Transcript of Struts y JSF Sesión 4: Funcionamiento de JSF

Page 1: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces1

Struts y JSFSesión 4:

Funcionamiento de JSF

Especialista en Aplicaciones y ServiciosWeb con Java Enterprise

Page 2: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces2

Un programa de ejemplo El ciclo de vida de una petición Validaciones definidas en la aplicación Peticiones JSF Eventos en JSF

Índice

Page 3: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces3

Índice

Un programa de ejemplo El ciclo de vida de una petición Validaciones definidas en la aplicación Peticiones JSF Eventos en JSF

Page 4: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces4

Componentes en el servidor

Una diferencia fundamental entre JSF yStruts/JSP es que en JSF la vista reside en elservidor en forma de componentes JSF

Page 5: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces5

Un ejemplo: calculator.jsp

<f:view> <h:form id="calcForm"> <h:panelGrid columns="3"> <h:outputLabel value="Primer número"/> <h:inputText id="firstNumber"

value="#{calcBean.firstNumber}" required="true"/>

<h:message for="firstNumber"/> ... <h:outputLabel value="Operación"/> <h:selectOneListbox id="operation" required="true"

value="#{calcBean.operation}"> <f:selectItem itemValue="+" itemLabel="suma"/> <f:selectItem itemValue="-" itemLabel="resta"/> <f:selectItem itemValue="*" itemLabel="multiplicación"/> <f:selectItem itemValue="/" itemLabel="división"/> </h:selectOneListbox> <h:message for="operation"/> </h:panelGrid> <h:commandLink action="#{calcBean.doOperation}">

<h:outputText value="calcular"/> </h:commandLink>

</h:form> </f:view>

Page 6: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces6

Pantalla

Page 7: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces7

¿Cuándo se crea el árbol de componentes?

En la primera petición (http://localhost:8080/calculator) secrea el árbol de componentes a partir del ficherocalculator.jsp

El árbol de componentes (vista) se guarda en elservidor.

En la segunda petición (cuando el usuario pinchaen el enlace “calcular” y se envía el formulario alservidor) JSF obtiene el árbol creadoanteriormente, lo guarda en la petición y le aplicael ciclo de vida a la petición.

Page 8: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces8

result.jsp

<f:view> <h:form id="calcResult"> Primer número: <h:outputText id="firstNumber" value="#{calcBean.firstNumber}"/> <br /> Segundo número: <h:outputText id="secondNumber"

value="#{calcBean.secondNumber}"/> <br /> Operación:

<h:outputText id="operation" value="#{calcBean.operation}"/> <br />

Resultado: <h:outputText id="result" value="#{calcBean.result}"/> <br />

<h:commandLink action="OK"> <h:outputText value="Volver"/> </h:commandLink>

</h:form> </f:view>

Page 9: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces9

Pantalla

Page 10: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces10

calculator.controller.CalculatorController

package calculator.controller;import calculator.model.Calculator;

public class CalculatorController { private Calculator calculator = new Calculator(); private int firstNumber = 0; private int secondNumber = 0; private String operation = ""; private int result = 0; public CalculatorController() {}

public int getFirstNumber() { return firstNumber; }

public void setFirstNumber(int firstNumber) { this.firstNumber = firstNumber; } // get-set int secondNumber // get-set String operation // get-set int result ...

BackingBean

¿Controller?

Page 11: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces11

calculator.controller.CalculatorController

... public String doOperation() { if (operation.equals("+")) result = calculator.add(firstNumber, secondNumber); else if (operation.equals("-")) result = calculator.substract(firstNumber, secondNumber); else if (operation.equals("*")) result = calculator.multiply(firstNumber, secondNumber); else if (operation.equals("/")) result = calculator.divide(firstNumber, secondNumber); return "OK"; }

Método de acción

Page 12: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces12

Programa ejemplo

Ejecutar el programa ejemplo.

Page 13: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces13

Un programa de ejemplo El ciclo de vida de una petición Validaciones definidas en la aplicación Peticiones JSF Eventos en JSF

Índice

Page 14: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces14

Ciclo de vida de una petición

Page 15: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces15

Un programa de ejemplo El ciclo de vida de una petición Validaciones definidas en la aplicación Peticiones JSF Eventos en JSF

Índice

Page 16: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces16

Validaciones definidas por el usuario

Las conversiones y validaciones de valores de componentesse realizan en la fase 3 (con excepción de aquelloscomponentes con el atribute “inmediate” a true, en los quese realizan en la fase 2).

Además de las validaciones y conversiones definidas porJSF, es posible ampliar el framework con las nuestraspropias.

Para ello debemos: 1. Crear una clase que implemente la interfaz

javax.faces.validator.Validator e implementar el métodovalidate() de esa interfaz.

2. Registrar el validador propio en el fichero “faces-config.xml” 3. Usar la etiqueta <f:validator/> en las páginas JSP.

Page 17: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces17

Validaciones definidas por el usuario

Probar el ejemplo en la aplicación “calculator”.

Page 18: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces18

Un programa de ejemplo El ciclo de vida de una petición Validaciones definidas en la aplicación Peticiones JSF Eventos en JSF

Índice

Page 19: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces19

Peticiones JSF

Una petición JSF tiene asociado un contexto, enforma de una instancia de FacesContext.

Esta clase define un conjunto de métodos que nospermiten obtener y modificar sus elementos:La cola de mensajesEl árbol de componentesObjetos de configuración de la aplicaciónMétodos de control del flujo del ciclo de vida

Page 20: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces20

Ejemplo de código

package calculator.validator;...import javax.faces.component.UIComponentBase;import javax.faces.component.UIViewRoot;import javax.faces.context.FacesContext;

public class PairNumberValidator implements Validator { public void validate(FacesContext arg0, UIComponent component,

Object value) throws ValidatorException { FacesContext context = FacesContext.getCurrentInstance(); UIViewRoot viewRoot = context.getViewRoot(); String ids = getComponentIds(viewRoot); FacesMessage message = new FacesMessage("Componentes: "+ ids); context.addMessage(null,message); ... } }

}

Page 21: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces21

Pantalla

Page 22: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces22

Un programa de ejemplo El ciclo de vida de una petición Validaciones definidas en la aplicación Peticiones JSF Eventos en JSF

Índice

Page 23: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces23

Tipos de eventos en JSF

En JSF se definetres grandes tiposde eventos:ValueChangeEventActionEventPhaseEvent

Page 24: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces24

Definir un manejador de ValueChangeEvent

Definir una clase que implemente la interfazValueChangeListener

Asociar esa clase con el componente que queremosvigilar usando la etiqueta

<f:valueChangeListener type="nombre de la clase"/>

Page 25: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces25

Ejemplo en la aplicación

Probar el ejemplo en la aplicación

Page 26: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces26

Procesamiento de eventos

Los eventos ValueChangeEvent se procesan después de lafase de “Process Validations”

El posible evento ActionEvent se procesa en la fase “InvokeApplication” Se llama al método de acción definido en el evento y se obtiene la

cadena resultante Se busca en el fichero “faces-config.xml” la regla a aplicar Se “carga” la nueva vista: se desecha el árbol de componentes

actual y se crea el nuevo árbol de componentes Si un componente de entrada o de acción tiene el atributo

“inmediate” a “true”, el evento asociado se procesa en laprimera fase “Apply Request Values”

Page 27: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces27

Eventos PhaseEvent

Se producen antes y después de todas las fases delciclo de vida de la petición

Un manejador de este evento debe implementar lainterfaz PhaseListener, con los métodosbeforePhase() y afterPase()

Se puede declarar un manejador propio en elfichero faces-config.xml:

<lifecycle> <phase-listener> calculator.controller.CalculatorPhaseListener </phase-listener></lifecycle>

Page 28: Struts y JSF Sesión 4: Funcionamiento de JSF

Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces28

Ejemplo en la aplicación

Probar ejemplo