java server faces el siguiente paso en el desarrollo web Óscar sánchez ramón. ssdd. curso 05/06

54
Java Server Java Server Faces Faces El siguiente paso en el El siguiente paso en el desarrollo web desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

Upload: julian-aguirre-cordero

Post on 23-Jan-2016

267 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

Java Server FacesJava Server Faces

El siguiente paso en el desarrollo webEl siguiente paso en el desarrollo web

Óscar Sánchez Ramón. SSDD. Curso 05/06

Page 2: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

ContenidosContenidos

1. ¿Qué es JSF?1. ¿Qué es JSF? 2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa? 3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología 4. Integración con otros frameworks4. Integración con otros frameworks 5. Resumen5. Resumen 6. Referencias.6. Referencias.

Page 3: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

1. ¿Qué es JSF?1. ¿Qué es JSF?

La tecnología La tecnología Java Server Faces (JSF)Java Server Faces (JSF) es un es un marco de trabajo de interfaces de usuario del lado marco de trabajo de interfaces de usuario del lado de servidor para aplicaciones Web basadas en de servidor para aplicaciones Web basadas en tecnología Java.tecnología Java.

Los dos componentes principales son:Los dos componentes principales son:• Una librería de etiquetas para JSPUna librería de etiquetas para JSP• Una API para manejo de eventos, validadores, etc.Una API para manejo de eventos, validadores, etc.

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

Page 4: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

1. ¿Qué es JSF?1. ¿Qué es JSF?

Permite a los desarrolladores pensar en términos Permite a los desarrolladores pensar en términos de componentes, eventos, backing beans y otras de componentes, eventos, backing beans y otras interacciones, en vez de hablar de peticiones, interacciones, en vez de hablar de peticiones, respuestas y marcas.respuestas y marcas.

JSF promete reutilización, separación de roles, JSF promete reutilización, separación de roles, facilidad de uso de las herramientas.facilidad de uso de las herramientas.

JSF tiene una meta específica: hacer el JSF tiene una meta específica: hacer el desarrollo web más rápido y fácil.desarrollo web más rápido y fácil.

Page 5: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

1. ¿Qué es JSF?1. ¿Qué es JSF?

JSF (en J2EE) es similar a JSF (en J2EE) es similar a ASP .NETASP .NET::• Interfaz de usuario dirigida por eventos,Interfaz de usuario dirigida por eventos,• Abstracción del protocolo HTTPAbstracción del protocolo HTTP

Controles en ASP .NET

De servidor

HTML

De validación

Tienencorrespondencia

en JSF

Page 6: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

HTTPHTTP ServletsServlets JavaBeansJavaBeans JSPJSP

Page 7: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

ServletsServlets• Amplía la funcionalidad del servidorAmplía la funcionalidad del servidor• Posterior al Posterior al CGICGI• API JavaAPI Java• Se ejecuta en un Se ejecuta en un contenedor de aplicacionescontenedor de aplicaciones• Hasta JSP, único modo de generar páginas Hasta JSP, único modo de generar páginas

web dinámicasweb dinámicas

Page 8: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

Servlets (ejemplo)Servlets (ejemplo)

MyTableData tableData = MyDAO.queryData();MyTableData tableData = MyDAO.queryData();PrintWriter writer = response.getWriter(); PrintWriter writer = response.getWriter(); writer.println("<table border=\"1\">");writer.println("<table border=\"1\">");for (int i=0; i<tableData.getData().length; i++){ for (int i=0; i<tableData.getData().length; i++){

writer.println("<tr>"); writer.println("<tr>"); writer.println("<td>"); writer.println("<td>");

writer.println(tableData.getData()[i]); writer.println(tableData.getData()[i]); writer.println("</td>"); writer.println("</td>");

writer.println("</tr>"); writer.println("</tr>"); }}writer.println("</table>"); writer.println("</table>");

Page 9: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

ServletsServlets

• Inconvenientes:Inconvenientes: Poco legiblePoco legible Mantenimiento costosoMantenimiento costoso El diseñador gráfico debe saber JavaEl diseñador gráfico debe saber Java A cada cambio: recompilar, empaquetar, desplegar.A cada cambio: recompilar, empaquetar, desplegar.

• Uso actual de los servlets:Uso actual de los servlets: Controlador en la arquitectura MVCControlador en la arquitectura MVC Preprocesamiento de peticionesPreprocesamiento de peticiones

Page 10: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

Java Server Pages (JSP)Java Server Pages (JSP)• Páginas HTML con scripts (por defecto Java)Páginas HTML con scripts (por defecto Java)• Se traduce a un servlet en la primera peticiónSe traduce a un servlet en la primera petición• Semánticamente equivalente a los servletsSemánticamente equivalente a los servlets• Facilitan el desarrollo y mantenimientoFacilitan el desarrollo y mantenimiento

Page 11: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 1.x JSP 1.x (Ejemplo de programación en sus inicios)(Ejemplo de programación en sus inicios)<% <% MyTableData tableData = MyDAO.queryData(); MyTableData tableData = MyDAO.queryData();

%> %> <table border="1"> <table border="1"> <% <%

for (int i = 0; i < for (int i = 0; i < tableData.getData().length; tableData.getData().length; i++) { i++) { %> %> <tr> <td> <tr> <td>

<%= tableData.getData()[i] %> <%= tableData.getData()[i] %> </td> </tr> </td> </tr> <% }%> <% }%>

</table></table>

Page 12: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 1.xJSP 1.x• Facilidad para manejo de JavaBeansFacilidad para manejo de JavaBeans

<jsp:useBean id=“user” class=“Cliente” scope=“session”><jsp:useBean id=“user” class=“Cliente” scope=“session”>

<form method=“POST” action=“actualiza.ctrl”><form method=“POST” action=“actualiza.ctrl”>

<input type=“text” name=“nombre” value=“<input type=“text” name=“nombre” value=“

<jsp:getProperty name=“user” property=“name”/><jsp:getProperty name=“user” property=“name”/>

“ “/>/>

</form></form>

</jsp:useBean></jsp:useBean>

Page 13: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 1.xJSP 1.x• Otras etiquetas estándar de JSPOtras etiquetas estándar de JSP

<jsp:forward page=“registro.jsp”<jsp:forward page=“registro.jsp”

<jsp:include page=“/servlet/ServletCookie”<jsp:include page=“/servlet/ServletCookie”

flush=“true” />flush=“true” />

<jsp:setProperty name=“cliente” property=“nif”<jsp:setProperty name=“cliente” property=“nif”

value=“53146712F” />value=“53146712F” />

Page 14: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 1.xJSP 1.x• Etiquetas de extensiónEtiquetas de extensión

Alternativa a los JavaBeans para encapsular la Alternativa a los JavaBeans para encapsular la lógica de negociológica de negocio

““Componentes” para la edición webComponentes” para la edición web Para usar declarativamente la lógica de negocioPara usar declarativamente la lógica de negocio Ejemplo:Ejemplo:

<ssdd:enlace URL=“index.jsp” texto”inicio”/><ssdd:enlace URL=“index.jsp” texto”inicio”/>

Page 15: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 1.x (Ejemplo de una nueva etiqueta)JSP 1.x (Ejemplo de una nueva etiqueta)

<table border="1"><table border="1"><tr><tr>

<td width="20%"><p <td width="20%"><p align="center"><b>Usuario</b></td>align="center"><b>Usuario</b></td>

<td width="50%"><p <td width="50%"><p align="center"><b>Nombre</b></td>align="center"><b>Nombre</b></td>

<td width="30%"><p <td width="30%"><p align="center"><b>Correo</b></td>align="center"><b>Correo</b></td></tr></tr><ssdd:listaUsuarios usuarios="<%= usuarios%>"><ssdd:listaUsuarios usuarios="<%= usuarios%>"><tr><tr>

<td with="20%“ align="center"><%=identificador<td with="20%“ align="center"><%=identificador%></td>%></td>

<td with="50%" align="center"><%=nombre%></td><td with="50%" align="center"><%=nombre%></td><td with="30%" align="center"><%=correo%></td><td with="30%" align="center"><%=correo%></td>

</tr></tr></ssdd:listaUsuarios></ssdd:listaUsuarios>

</table></table>

Page 16: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP (Código de la nueva etiqueta) (1 de 2)JSP (Código de la nueva etiqueta) (1 de 2)

public class UsuariosTag extends BodyTagSupport {public class UsuariosTag extends BodyTagSupport {private Collection usuarios;private Collection usuarios;private Iterator it;private Iterator it;

public void setUsuarios(Collection usuarios) {public void setUsuarios(Collection usuarios) {this.usuarios = usuarios;this.usuarios = usuarios;

}}

public void doInitBody() throws JspTagException {public void doInitBody() throws JspTagException {it = usuarios.iterator();it = usuarios.iterator();Cliente c = (Cliente) it.next();Cliente c = (Cliente) it.next();if (c == null)if (c == null)

return;return;else {else {

pageContext.setAttribute("identificador", pageContext.setAttribute("identificador", c.getUsuario());c.getUsuario());

pageContext.setAttribute("nombre", c.getNombre());pageContext.setAttribute("nombre", c.getNombre());pageContext.setAttribute("correo", c.getCorreo());pageContext.setAttribute("correo", c.getCorreo());return;return;

}}}}

Page 17: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP (Código de la nueva etiqueta)(2 de 2)JSP (Código de la nueva etiqueta)(2 de 2)

public int doAfterBody() throws JspTagException {public int doAfterBody() throws JspTagException {BodyContent bodyContent = getBodyContent();BodyContent bodyContent = getBodyContent();if (bodyContent != null) {if (bodyContent != null) {

try {try {bodyContent.getEnclosingWriter().bodyContent.getEnclosingWriter().

print(bodyContent.getString());print(bodyContent.getString());bodyContent.clearBody();bodyContent.clearBody();

} catch (Exception e) { throw new } catch (Exception e) { throw new JspTagException(e.getMessage());}JspTagException(e.getMessage());}

}}if (it.hasNext()) {if (it.hasNext()) {Cliente c = (Cliente) it.next();Cliente c = (Cliente) it.next();pageContext.setAttribute("identificador", pageContext.setAttribute("identificador",

c.getUsuario());c.getUsuario());pageContext.setAttribute("nombre", c.getNombre());pageContext.setAttribute("nombre", c.getNombre());pageContext.setAttribute("correo", c.getCorreo());pageContext.setAttribute("correo", c.getCorreo());return EVAL_BODY_TAG;return EVAL_BODY_TAG;} else return SKIP_BODY;} else return SKIP_BODY;

}}}}

Page 18: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP Standard Tag Library (JSTL)JSP Standard Tag Library (JSTL)• Librería de etiquetas para JSP.Librería de etiquetas para JSP.• No es parte de JSP ni JSF, los complementaNo es parte de JSP ni JSF, los complementa• Precursor: librerías de etiquetas de Precursor: librerías de etiquetas de StrutsStruts• Formado por 4 librerías:Formado por 4 librerías:

corecore: funciones script básicas : funciones script básicas xmlxml: procesamiento de xml : procesamiento de xml fmtfmt: internacionalización y formato : internacionalización y formato sqlsql: acceso a base de datos : acceso a base de datos

Page 19: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa? JSTL (Ejemplo con scriptlets, sin JSTL)JSTL (Ejemplo con scriptlets, sin JSTL)

<%@ page import=“com.ktaylor.model.AddressVO, java.util.*” %><%@ page import=“com.ktaylor.model.AddressVO, java.util.*” %><%<%

List addresses = List addresses = (List)request.getAttribute("addresses");(List)request.getAttribute("addresses");Iterator addressIter = addresses.iterator(); Iterator addressIter = addresses.iterator(); while(addressIter.hasNext()) {while(addressIter.hasNext()) {

AddressVO address =(AddressVO)addressIter.next();AddressVO address =(AddressVO)addressIter.next();if((null != address) && (null != if((null != address) && (null !=

address.getLastName()) address.getLastName()) && && (address.getLastName().length() > 0)) {(address.getLastName().length() > 0)) {

%>%><%<%

=address.getLastName()%><br/> =address.getLastName()%><br/> <%<%

} else {} else {%>%>N/A<br/>N/A<br/><% } } %><% } } %>

Page 20: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSTL (Ejemplo sin scriptlets, con JSTL)JSTL (Ejemplo sin scriptlets, con JSTL)

<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %> <c:forEach items="${addresses}" var="address"> <c:forEach items="${addresses}" var="address">

<c:choose><c:choose><c:when test="${not empty address.lastName}" ><c:when test="${not empty address.lastName}" >

<c:out value="${address.lastName}"/><br/><c:out value="${address.lastName}"/><br/></c:when></c:when><c:otherwise><c:otherwise>

N/A<br/>N/A<br/></c:otherwise></c:otherwise>

</c:choose><br/></c:choose><br/></c:forEach><br/></c:forEach><br/>

Etiqueta

Iterador

Librería básica

Lenguaje de expresiones

Page 21: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• Evolución de JSP 1.2Evolución de JSP 1.2• Separación completa de rolesSeparación completa de roles• Todavía se habla de cabeceras, sesión, …Todavía se habla de cabeceras, sesión, …• Elementos principales:Elementos principales:

Lenguaje de expresiones (EL)Lenguaje de expresiones (EL) Ficheros de etiquetasFicheros de etiquetas SimpleTag vs TagSimpleTag vs Tag Mejorada la sintaxis XMLMejorada la sintaxis XML

Page 22: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• Lenguaje de expresiones (EL)Lenguaje de expresiones (EL)

Mismo EL que JSTL, pero soportado nativamenteMismo EL que JSTL, pero soportado nativamente Meta: que lo use gente que no sabe programarMeta: que lo use gente que no sabe programar Inspirado en JavaScript y XPathInspirado en JavaScript y XPath Se puede desactivar los scriptlets y habilitar ELSe puede desactivar los scriptlets y habilitar EL ${${ <expresión> <expresión> }}

Page 23: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• Ejemplos de ELEjemplos de EL

((Duck) pageContext.getAttribute(”duck”)).getBeakColor()((Duck) pageContext.getAttribute(”duck”)).getBeakColor()

${duck.beakColor}${duck.beakColor}

<jsp:useBean id="foo" class="FooBean" /><jsp:useBean id="foo" class="FooBean" />

<%= foo.getBar() %><%= foo.getBar() %>

${foo.bar}${foo.bar}

Con ELSin EL

Page 24: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• Ficheros de etiquetasFicheros de etiquetas

Escribir etiquetas sólo con código JSPEscribir etiquetas sólo con código JSP Mecanismo de reutilización para autores de páginasMecanismo de reutilización para autores de páginas Empaquetado de la aplicación más flexibleEmpaquetado de la aplicación más flexible

Etiquetas en /WEB-INF/tagsEtiquetas en /WEB-INF/tags TLD implícitoTLD implícito <%@ taglib prefix="..." tagdir="/WEB-INF/tags" %><%@ taglib prefix="..." tagdir="/WEB-INF/tags" %>

Page 25: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• Ejemplo de fichero de etiqueta.Ejemplo de fichero de etiqueta.

<%@ tag name=”tableTag” %><%@ tag name=”tableTag” %><%@ attribute name=”items” %><%@ attribute name=”items” %>

<table width=”…” bgcolor=”…”><table width=”…” bgcolor=”…”> <th><th> <td>Name</td> <td>IQ</td><td>Name</td> <td>IQ</td> </th></th> <c:forEach var=”i” items=”${items}”><c:forEach var=”i” items=”${items}”> <tr><tr> <td>${i.fullName}</td><td>${i.fullName}</td> <td>${i.IQ}</td><td>${i.IQ}</td> </tr></tr> </c:forEach></c:forEach></table></table>

Page 26: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• La anterior API para definir nuevas etiquetas (Tag)La anterior API para definir nuevas etiquetas (Tag)

Tag handler

doStartTag() doEndTag()

doCatch() doFinally()

Tagattributes

Tagbody

doInitBody()

doAfterBody()

release()

Antes

Page 27: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• Nueva API para definir etiquetas (SimpleTag)Nueva API para definir etiquetas (SimpleTag)

Tag handler

Tagattributes

Tagbody

(no scriptlets)

doTag()

Ahora

Page 28: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

JSP 2.0JSP 2.0• Mejorada la sintaxis XMLMejorada la sintaxis XML

Antes: JSP como documento Antes: JSP como documento <jsp: root><jsp: root>

Ahora: JSP como espacio de nombres Ahora: JSP como espacio de nombres <html xmlns:util="http://mytaglib"<html xmlns:util="http://mytaglib"

xmlns:c="http://java.sun.com/jsp/jstl/core">xmlns:c="http://java.sun.com/jsp/jstl/core">

Page 29: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

2. ¿En qué tecnologías se basa?2. ¿En qué tecnologías se basa?

Page 30: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Componentes de interfaz de usuarioComponentes de interfaz de usuario EventosEventos Beans manejadosBeans manejados ValidadoresValidadores Internacionalización y localizaciónInternacionalización y localización ConversoresConversores NavegaciónNavegación

Page 31: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Los componentes de la interfaz de usuarioLos componentes de la interfaz de usuario• Son JavaBeansSon JavaBeans• Se ejecutan en el lado del servidorSe ejecutan en el lado del servidor• Tienen estadoTienen estado• Se organizan en árboles de vistasSe organizan en árboles de vistas• Representación específica: Representación específica: rendererrenderer• Familia de representaciones: Familia de representaciones: kits de rendererkits de renderer

• <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

Page 32: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Los componentes de la interfaz de usuarioLos componentes de la interfaz de usuario

<h:commandButton id=“siguiente” <h:commandButton id=“siguiente” value=“#{msg.buttonHeader}” action=“sigPagina”/>value=“#{msg.buttonHeader}” action=“sigPagina”/>

<h:inputTextarea id=“textArea” rows=“4” cols=“7” <h:inputTextarea id=“textArea” rows=“4” cols=“7” value=“Text goes here…”/>value=“Text goes here…”/>

Page 33: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Los componentes de la interfaz de usuarioLos componentes de la interfaz de usuario• Ejemplo (traducción de JSF a HTML) (1 de 2)Ejemplo (traducción de JSF a HTML) (1 de 2)

Enter address: <h:message style="color: red" for="useraddress" /> <h:inputText id="useraddress" value="#{jsfexample.address}"

required="true"/> <h:commandButton action="save" value="Save"/>

Page 34: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Los componentes de la interfaz de usuarioLos componentes de la interfaz de usuario• Ejemplo (traducción de JSF a HTML) (2 de 2)Ejemplo (traducción de JSF a HTML) (2 de 2)

Enter address: <span style="color: red">Enter address: <span style="color: red">

Validation Error: Value is required. </span> Validation Error: Value is required. </span>

<input id="jsftags:useraddress" type="text" <input id="jsftags:useraddress" type="text" name="jsftags:useraddress" value="" /> name="jsftags:useraddress" value="" />

<input type="submit" name="jsftags:_id1" value="Save" /> <input type="submit" name="jsftags:_id1" value="Save" />

Page 35: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

EventosEventos• Los componentes UI generan eventosLos componentes UI generan eventos• Los listeners se implementan en backing Los listeners se implementan en backing

beans o clases apartebeans o clases aparte• 4 tipos:4 tipos:

Value-change eventsValue-change events Action eventsAction events Data model eventsData model events Phase eventsPhase events

Page 36: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

EventosEventos• Ejemplo: value-change eventEjemplo: value-change event

<h:inputText<h:inputTextvalueChangeListener=“#{myForm.processValueChanged}“valueChangeListener=“#{myForm.processValueChanged}“

/>/>

public void processValueChanged(ValueChangeEvent event){public void processValueChanged(ValueChangeEvent event){ HtmlInputText sender = (HtmlInputText)event.getComponent();HtmlInputText sender = (HtmlInputText)event.getComponent(); sender.setReadonly(true);sender.setReadonly(true); changePanel.setRendered(true);changePanel.setRendered(true);}}

Page 37: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

EventosEventos• Ejemplo: action eventEjemplo: action event

<h:commandButton id="redisplayCommand" type="submit" <h:commandButton id="redisplayCommand" type="submit" value="Redisplay"value="Redisplay"actionListener="#{myForm.doIt}“actionListener="#{myForm.doIt}“

/>/>

public void doIt(ActionEvent event){public void doIt(ActionEvent event){ HtmlCommandButton button =HtmlCommandButton button = (HtmlCommandButton)event.getComponent();(HtmlCommandButton)event.getComponent(); button.setValue("It's done!");button.setValue("It's done!");}}

Page 38: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Beans manejados (Managed beans)Beans manejados (Managed beans)• Beans de respaldo (Backing beans)Beans de respaldo (Backing beans)

JavaBeans especializadosJavaBeans especializados Contienen datos de componentes UI, implementan Contienen datos de componentes UI, implementan

métodos de oyentes de eventosmétodos de oyentes de eventos Controlador en el Controlador en el Modelo Vista Controlador(MVC)Modelo Vista Controlador(MVC) Backing bean por página, formulario, …Backing bean por página, formulario, … Componente UI y backing bean están Componente UI y backing bean están sincronizadossincronizados

• Son backing beans que usan la facilidad Son backing beans que usan la facilidad Manager Bean Creation FacilityManager Bean Creation Facility

Page 39: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Beans Manejados (Managed Beans)Beans Manejados (Managed Beans)• Ejemplo de declaración (Ejemplo de declaración (faces-config.xmlfaces-config.xml):):

<managed-bean><managed-bean>

<managed-bean-name>helloBean</managed-bean-name><managed-bean-name>helloBean</managed-bean-name>

<managed-bean-class><managed-bean-class>

com.virtua.jsf.sample.hello.HelloBeancom.virtua.jsf.sample.hello.HelloBean

</managed-bean-class></managed-bean-class>

<managed-bean-scope><managed-bean-scope>

sessionsession

</managed-bean-scope></managed-bean-scope>

</managed-bean></managed-bean>

Page 40: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Beans Manejados (Managed Beans)Beans Manejados (Managed Beans)• Ejemplo de uso:Ejemplo de uso:

<h:outputText id="helloBeanOutput"<h:outputText id="helloBeanOutput"

value=“#{helloBean.numControls}“value=“#{helloBean.numControls}“

/>/>

Utiliza EL parecido al de JSP 2.0

Page 41: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

ValidadoresValidadores• Aseguran la correcta introducción de valoresAseguran la correcta introducción de valores• Evitan escribir código Java y/o JavascriptEvitan escribir código Java y/o Javascript• JSF provee de validadores estándarJSF provee de validadores estándar• Podemos crear validadores propiosPodemos crear validadores propios• Generan mensajes de errorGeneran mensajes de error• 3 tipos:3 tipos:

A nivel de componente UI A nivel de componente UI Métodos validadores en los backing beans (Métodos validadores en los backing beans (validatorvalidator)) Clases validadoras (etiqueta propia anidada)Clases validadoras (etiqueta propia anidada)

Page 42: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Validadores:Validadores:• Estándar de JSF: campo con valor requerido, Estándar de JSF: campo con valor requerido,

validadores de la longitud de una cadena, y validadores de la longitud de una cadena, y validadores de rango para enteros y decimalesvalidadores de rango para enteros y decimales

• Ejemplos:Ejemplos:

<h:inputText id="userNumber“ <h:inputText id="userNumber“ valuevalue="#{NumberBean.userNumber}” valuevalue="#{NumberBean.userNumber}” required=“true”required=“true”

/>/>

<h:inputText><h:inputText><f:validateLength minimum="2" maximum="10"/><f:validateLength minimum="2" maximum="10"/>

</h:inputText></h:inputText>

Page 43: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Internacionalización y localizaciónInternacionalización y localización

• Internacionalización: Internacionalización: habilidad de una aplicación de habilidad de una aplicación de soportar diferentes lenguajes dependiendo de la región soportar diferentes lenguajes dependiendo de la región del planeta en que nos encontremos.del planeta en que nos encontremos.

• Localización:Localización: El proceso de modificar una aplicación El proceso de modificar una aplicación para que soporte la lengua de una región.para que soporte la lengua de una región.

• JSF ofrece el soporte, no las traduccionesJSF ofrece el soporte, no las traducciones• El usuario indica su lengua mediante el navegadorEl usuario indica su lengua mediante el navegador

Page 44: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Internacionalización y localizaciónInternacionalización y localización• Ejemplo (declaración en Ejemplo (declaración en faces-config.xmlfaces-config.xml):):

<application><application>

<locale-config><locale-config>

<default-locale>en</default-locale><default-locale>en</default-locale>

<supported-locale>en</supported-locale><supported-locale>en</supported-locale>

<supported-locale>en_US</supported-locale><supported-locale>en_US</supported-locale>

<supported-locale>es_ES</supported-locale><supported-locale>es_ES</supported-locale>

</locale-config></locale-config>

<message-bundle>CustomMessages</message-bundle><message-bundle>CustomMessages</message-bundle>

</application></application>

Page 45: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

Internacionalización y localizaciónInternacionalización y localización• Ejemplo Ejemplo (resource bundles(resource bundles y uso y uso):):

<f:loadBundle basename="LocalizationResources" var="bundle"/><f:loadBundle basename="LocalizationResources" var="bundle"/>

LocalizationResources_en.properties

halloween=Every day is like Halloween.halloween=Every day is like Halloween.numberOfVisits=You have visited us {0} time(s), {1}. Rock on!numberOfVisits=You have visited us {0} time(s), {1}. Rock on!toggleLocale=Translate to SpanishtoggleLocale=Translate to SpanishhelloImage=../images/hello.gifhelloImage=../images/hello.gif

<h:outputText value="#{bundle.halloween}"/><h:outputText value="#{bundle.halloween}"/>

Page 46: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

ConversoresConversores• Convierten el valor de un componente desde y a Convierten el valor de un componente desde y a

una cadenauna cadena• Cada componente se asocia a un sólo conversorCada componente se asocia a un sólo conversor• El renderer lo usa para saber mostrar los datosEl renderer lo usa para saber mostrar los datos• JSF tiene definidos para fechas, números, etc.JSF tiene definidos para fechas, números, etc.• Podemos crear los nuestros propiosPodemos crear los nuestros propios• Tienen en cuenta la localización y formatoTienen en cuenta la localización y formato

Page 47: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

ConversoresConversores

• Muestran un error si la entrada no es correctaMuestran un error si la entrada no es correcta• Por defecto JSF asigna uno adecuadoPor defecto JSF asigna uno adecuado

• Se pueden definir de 4 formas:Se pueden definir de 4 formas: Etiqueta propia anidada en la del componenteEtiqueta propia anidada en la del componente En la etiqueta del componente con En la etiqueta del componente con converterconverter

Etiqueta Etiqueta <f:converter><f:converter> anidada anidada Etiquetas predefinidas (otras) anidadasEtiquetas predefinidas (otras) anidadas

Conversores no predefinidos

Page 48: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

ConversoresConversores• Ejemplo (conversor predefinido):Ejemplo (conversor predefinido):

<h:outputText value="#{user.dateOfBirth}"><h:outputText value="#{user.dateOfBirth}">

<f:convertDateTime type="date" dateStyle="short"/><f:convertDateTime type="date" dateStyle="short"/>

</h:outputText></h:outputText>

18/03/0618/03/0603/18/0603/18/06

Page 49: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

NavegaciónNavegación• Habilidad de pasar de una página a la otraHabilidad de pasar de una página a la otra• Lo controla el Lo controla el manejador de navegaciónmanejador de navegación• Correspondencia salida/página: Correspondencia salida/página: caso de navegacióncaso de navegación• Hay que definir las Hay que definir las reglas de navegaciónreglas de navegación

Page 50: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

3. Los conceptos clave de la tecnología3. Los conceptos clave de la tecnología

NavegaciónNavegación Ejemplo de declaración (Ejemplo de declaración (faces-config.xmlfaces-config.xml):):

<navigation-rule><navigation-rule><from-view-id>/login.jsp</from-view-id><from-view-id>/login.jsp</from-view-id><navigation-case><navigation-case>

<from-outcome>success</from-outcome><from-outcome>success</from-outcome><to-view-id>/mainmenu.jsp</to-view-id><to-view-id>/mainmenu.jsp</to-view-id>

</navigation-case></navigation-case><navigation-case><navigation-case>

<from-outcome>failure</from-outcome><from-outcome>failure</from-outcome><to-view-id>/login.jsp</to-view-id><to-view-id>/login.jsp</to-view-id>

</navigation-case></navigation-case>

</navigation-rule></navigation-rule> o o

Página origen

Página destino

acción

Page 51: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

4. Integración con otros frameworks4. Integración con otros frameworks

JSF con StrutsJSF con Struts

Page 52: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

4. Integración con otros frameworks4. Integración con otros frameworks

JSF con Spring e HibernateJSF con Spring e Hibernate

Page 53: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

5. Resumen5. Resumen

JSF es una tecnología de interfaces de JSF es una tecnología de interfaces de usuario centrada en el MVC, interesante y usuario centrada en el MVC, interesante y en creciente augeen creciente auge

Pretende reducir el salto entre las Pretende reducir el salto entre las aplicaciones de escritorio y las web, aplicaciones de escritorio y las web, abstrayendo del protocolo HTTPabstrayendo del protocolo HTTP

Promete reutilización, separación de roles, Promete reutilización, separación de roles, facilidad de uso y reducir el time-to-marketfacilidad de uso y reducir el time-to-market

Se puede combinar con otros frameworks Se puede combinar con otros frameworks para obtener un soporte más potentepara obtener un soporte más potente

Page 54: Java Server Faces El siguiente paso en el desarrollo web Óscar Sánchez Ramón. SSDD. Curso 05/06

6. Referencias6. Referencias

““Java Server Faces In Action”, K.D. Mann Ed. Manning. Java Server Faces In Action”, K.D. Mann Ed. Manning. 20052005

Integrating JSP/JSF and XML/XSLTIntegrating JSP/JSF and XML/XSLThttp://http://www.theserverside.comwww.theserverside.com//articlesarticles//article.tss?larticle.tss?l==BestBothWorldsBestBothWorlds

JSF KickStart: A Simple JavaServer Faces ApplicationJSF KickStart: A Simple JavaServer Faces Applicationhttphttp://://www.programacion.comwww.programacion.com/java//java/tutorialtutorial//jap_jsfworkjap_jsfwork//

Integración de JSF, Spring e Hibernate para crear una Integración de JSF, Spring e Hibernate para crear una Aplicación Web del Mundo RealAplicación Web del Mundo Realhttp://http://www.exadel.comwww.exadel.com//tutorialtutorial//jsfjsf//jsftutorialjsftutorial--kickstart.htmlkickstart.html

JSP 2.0 and JSTL: Principles and PatternsJSP 2.0 and JSTL: Principles and Patternsweb.princeton.eduweb.princeton.edu//sitessites//isappsisapps//jasigjasig//2002WinterOrlando2002WinterOrlando//presentationspresentations/jsp20-/jsp20-jasigjasig-2002.-2002.pptppt