Struts y JSF Sesión 4: Funcionamiento de JSF
Transcript of 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
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
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
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
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>
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces6
Pantalla
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.
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>
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces9
Pantalla
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?
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
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces12
Programa ejemplo
Ejecutar el programa ejemplo.
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
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces14
Ciclo de vida de una petición
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
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.
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”.
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
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
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); ... } }
}
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces21
Pantalla
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
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
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"/>
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces25
Ejemplo en la aplicación
Probar el ejemplo en la aplicación
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”
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>
Struts y JSF Copyright © 2004-2006 Universidad de Alicante Funcionamiento JavaServer Faces28
Ejemplo en la aplicación
Probar ejemplo