Lets Rock JavaFundamentos de Java Enterprise Editioncon JDeveloperEudris Cabrera RodriguezIngeniero TelemáticoSenior Softw...
ObjetivosAprender los conceptos fundamentales sobre los manejadores depersistencia en Java y su implementación en una apli...
Agenda  ○ Manejadores de persistencia    ■ Conceptos y Definiciones    ■ Introdución a Java Persistence API (JPA)    ■ Con...
Conceptos y definiciones   En Java solucionamos problemas de negocio a través de   objetos, los cuales tienen estado y com...
Conceptos y definicionesEsta conversión se llama ORM (Object Relational Mapping -Mapeo Relacional de Objetos), y puede con...
Introdución a Java Persistence API (JPA)UNA ENTIDAD SIMPLE:import javax.persistence.Entity;import javax.persistence.Genera...
Introdución a Java Persistence API (JPA)Las entidades suelen ser POJOs. La clase Pelicula se haanotado con @Entity, lo cua...
Introdución a Java Persistence API (JPA)IDENTIDAD:Todas las entidades tienen que poseer una identidad que lasdiferencie de...
Introdución a Java Persistence API (JPA)Con esta configuración por defecto, todas las entidades deltipo Pelicula serán map...
Introdución a Java Persistence API (JPA)   En ese caso, podemos configurar el mapeo de manera   que se ajuste a dichas tab...
Introdución a Java Persistence API (JPA)La anotación @Table nos permite configurar el nombre de latabla donde queremos alm...
LETS CODE !!!
Introdución a Java Persistence API (JPA)LECTURA TEMPRANA Y LECTURA DEMORADAJPA nos permite leer una propiedad desde la bas...
Introdución a Java Persistence API (JPA)ASOCIACIONESCuando queremos mapear colecciones de entidades,debemos usar asociacio...
Introdución a Java Persistence API (JPA)Además del concepto de dirección, existe otro conceptollamado cardinalidad, que de...
Introdución a Java Persistence API (JPA)ASOCIACIONES UNIDIRECCIONALES@Entity                     @Entitypublic class Clien...
Introdución a Java Persistence API (JPA)Otro tipo de asociación muy común es la de tipo uno-a-muchos (one-to-many) unidire...
Introdución a Java Persistence API (JPA)ASOCIACIONES BIDIRECCIONALESEn las asociaciones bidireccionales, ambos extremos de...
Introdución a Java Persistence API (JPA)Ejemplo de bidireccionalidad en una relación de tipouno-a-uno@Entity              ...
Introdución a Java Persistence API (JPA)PERSISTENCIA :El concepto de persistencia implica el hecho de almacenarnuestras en...
Introdución a Java Persistence API (JPA)PERSISTIR UNA ENTIDAD :public class Main {    public static void main(String[] arg...
Introdución a Java Persistence API (JPA)LEER UNA ENTIDADLeer una entidad previamente persistida en la base de datospara co...
Introdución a Java Persistence API (JPA)La segunda manera de leer una entidad nos permite obteneruna referencia a los dato...
Introdución a Java Persistence API (JPA)ACTUALIZAR UNA ENTIDADMediante el método merge() de EntityManager podemostener nue...
Introdución a Java Persistence API (JPA)ELIMINAR UNA ENTIDADem.remove(pelicula);Cuando existe una asociación uno-a-uno y u...
Introdución a Java Persistence API (JPA)OPERACIONES EN CASCADAEste tipo de operaciones permiten establecer la forma en que...
Introdución a Java Persistence API (JPA)CascadeType.PERSIST  .REMOVE  .MERGE  .REFRESH  .DETACH  .ALLLa última constante, ...
Introdución a Java Persistence API (JPA)@OneToOne(cascade = {    CascadeType.MERGE,    CascadeType.REMOVE,    })private De...
LETS CODE !!!
Conceptos Avanzados de Java Persistence API (JPA)JPQL (Java Persistence Query Language - Lenguaje de Consulta dePersistenc...
Conceptos Avanzados de Java Persistence API (JPA)SENTENCIAS CONDICIONALESEl primero de ellos es el de consulta condicional...
Conceptos Avanzados de Java Persistence API (JPA)PARÁMETROS DINÁMICOSPodemos añadir parámetros dinámicamente a nuestras se...
Conceptos Avanzados de Java Persistence API (JPA)EJECUCIÓN DE SENTENCIAS JPQLEl lenguaje JPQL es integrado a través de imp...
Conceptos Avanzados de Java Persistence API (JPA)CONSULTAS CON NOMBRE (ESTÁTICAS)Las consultas con nombre son diferentes d...
Conceptos Avanzados de Java Persistence API (JPA)CONSULTAS NATIVAS SQLEl tercer y último tipo de consultas que nos queda p...
Conceptos Avanzados de Java Persistence API (JPA)Las consultas SQL nativas pueden ser definidas de manera estáticacomo hic...
Persistencia en la capa Web
JSTL (JavaServer pages Standard Tag Library)A partir de JSP 1.2. se introduce un conjunto delibrerías en la especificación...
JSTL (JavaServer pages Standard Tag Library)Expression language (EL)JSTL define un lenguaje de expresiones (EL),que facili...
JSTL (JavaServer pages Standard Tag Library)La librería core.En las páginas que la usen deberemos incluir la siguientedire...
JSTL (JavaServer pages Standard Tag Library)setGuarda información en una variable, tiene los siguientesatributos:- var. No...
JSTL (JavaServer pages Standard Tag Library)ifProcesa el cuerpo de la etiqueta si la condición se evalúa acierto. La condi...
JSTL (JavaServer pages Standard Tag Library)choose, when y otherwiseProcesa condiciones múltiples, se procesa el cuerpo de...
JSTL (JavaServer pages Standard Tag Library)Ejemplo:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:cho...
JSTL (JavaServer pages Standard Tag Library)forEach y forTokens.forEach consta de los siguientes atributos:- items. Indica...
JSTL (JavaServer pages Standard Tag Library)forTokens permite partir una cadena en fragmentos yrecorrer cada uno de éstos,...
JSTL (JavaServer pages Standard Tag Library)   Ejemplo:   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"   ...
JSTL (JavaServer pages Standard Tag Library)<c:forEach items="${param}" var="parametro">Nombre: ${parametro.key}Valor: ${p...
JSTL (JavaServer pages Standard Tag Library)redirectRedirige a la dirección especificada en el atributo url, y abortael pr...
JSTL (JavaServer pages Standard Tag Library)Control de errores con catchCon <c:catch> podemos capturar excepciones, sin qu...
JSTL (JavaServer pages Standard Tag Library)La librería formattingContiene etiquetas que realizan diversas funcionesrelaci...
JSTL (JavaServer pages Standard Tag Library)formatDatePermite formatear fechas. Tiene, entre otros, los siguientesatributo...
JSTL (JavaServer pages Standard Tag Library)   Ejemplo   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"   %...
LETS CODE !!!
PREGUNTAS ?
WE ROCK JAVA !!!
Upcoming SlideShare
Loading in …5
×

[ES] Manejadores de persistencia

818 views
782 views

Published on

Conocer los conceptos fundamentales sobre los manejadores de persistencia en Java y su implementación en una aplicación empresarial Java (JEE).

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
818
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
32
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

[ES] Manejadores de persistencia

  1. 1. Lets Rock JavaFundamentos de Java Enterprise Editioncon JDeveloperEudris Cabrera RodriguezIngeniero TelemáticoSenior Software DeveloperSkype:eudriscabreraLinkedIn:http://www.linkedin.com/in/eudriscabreraDiciembre 2011, Santiago de los Caballeros, R. D.
  2. 2. ObjetivosAprender los conceptos fundamentales sobre los manejadores depersistencia en Java y su implementación en una aplicaciónempresarial Java (JEE).
  3. 3. Agenda ○ Manejadores de persistencia ■ Conceptos y Definiciones ■ Introdución a Java Persistence API (JPA) ■ Conceptos Avanzados de Java Persistence API (JPA) ○ Persistencia en la capa web ○ JSTL (JavaServer pages Standard Tag Library)
  4. 4. Conceptos y definiciones En Java solucionamos problemas de negocio a través de objetos, los cuales tienen estado y comportamiento. Sin embargo, las bases de datos relacionales almacenan la información mediante tablas, filas, y columnas, de manera que para almacenar un objeto hay que realizar una correlación entre el sistema orientado a objetos de Java y el sistema relacional de nuestra base de datos. JPA (Java Persistence API - API de Persistencia en Java) es una abstracción sobre JDBC que nos permite realizar dicha correlación de forma sencilla, realizando por nosotros toda la conversión entre nuestros objetos y las tablas de una base de datos.
  5. 5. Conceptos y definicionesEsta conversión se llama ORM (Object Relational Mapping -Mapeo Relacional de Objetos), y puede configurarse através de metadatos (mediante xml o anotaciones).Por supuesto, JPA también nos permite seguir el sentidoinverso, creando objetos a partir de las tablas de una base dedatos, y también de forma transparente. A estos objetos losllamaremos desde ahora entidades (entities).JPA establece una interface común que es implementada porun proveedor de persistencia de nuestra elección (comoHibernate, Eclipse Link, etc), de manera que podemos elegiren cualquier momento el proveedor que más se adecue anuestras necesidades. Así, es el proveedor quién realiza eltrabajo, pero siempre funcionando bajo la API de JPA.
  6. 6. Introdución a Java Persistence API (JPA)UNA ENTIDAD SIMPLE:import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entitypublic class Pelicula { @Id @GeneratedValue private Long id; private String titulo; private int duracion; // Getters y Setters
  7. 7. Introdución a Java Persistence API (JPA)Las entidades suelen ser POJOs. La clase Pelicula se haanotado con @Entity, lo cual informa al proveedor depersistencia que cada instancia de esta clase es una entidad.Para ser válida, toda entidad debe:- Tener un constructor por defecto- Ser una clase de primer nivel (no interna)- No ser final- Implementar la interface java.io.Serializabe si es accedidaremotamenteLa configuración de mapeo puede ser especificada medianteun archivo de configuración XML, o mediante anotaciones. Aesta configuración del mapeo la llamamos metadatos.
  8. 8. Introdución a Java Persistence API (JPA)IDENTIDAD:Todas las entidades tienen que poseer una identidad que lasdiferencie del resto, por lo que deben contener una propiedadmarcada con la anotación @Id (es aconsejable que dichapropiedad sea de un tipo que admita valores null, comoInteger en lugar de int).CONFIGURACIÓN POR DEFECTO :JPA aplica a las entidades que maneja una configuración pordefecto, de manera que una entidad es funcional con unamínima cantidad de información (las anotaciones @Entity y@Id en nuestro caso).
  9. 9. Introdución a Java Persistence API (JPA)Con esta configuración por defecto, todas las entidades deltipo Pelicula serán mapeadas a una tabla de la base de datosllamada PELICULA, y cada una de sus propiedades serámapeada a una columna con el mismo nombre (la propiedadid será mapeada en la columna ID, la propiedad título serámapeada en la columna TITULO, etc).Sin embargo, no siempre es posible ceñirse a los valores dela configuración por defecto: imaginemos que tenemos quetrabajar con una base de datos heredada, con nombres detablas y filas ya definidos.
  10. 10. Introdución a Java Persistence API (JPA) En ese caso, podemos configurar el mapeo de manera que se ajuste a dichas tablas y filas: @Entity @Table(name = "TABLA_PELICULAS") public class Pelicula { @Id @GeneratedValue @Column(name = "ID_PELICULA") private Long id; ... }
  11. 11. Introdución a Java Persistence API (JPA)La anotación @Table nos permite configurar el nombre de latabla donde queremos almacenar la entidad mediante elatributo name.Así mismo, mediante la anotación @Column podemosconfigurar el nombre de la columna donde se almacenará unapropiedad, si dicha propiedad puede contener un valor null,etc.
  12. 12. LETS CODE !!!
  13. 13. Introdución a Java Persistence API (JPA)LECTURA TEMPRANA Y LECTURA DEMORADAJPA nos permite leer una propiedad desde la base de datos laprimera vez que un cliente intenta leer su valor (lectura demorada).Esto puede ser útil si la propiedad contiene un objeto de grantamaño:@Basic(fetch = FetchType.LAZY)private Imagen portada;El comportamiento por defecto de la mayoría de tipos Java es elcontrario (lectura temprana). Este comportamiento, a pesar de serimplícito, puede ser declarado explícitamente de la siguientemanera:@Basic(fetch = FetchType.EAGER)private Imagen portada;
  14. 14. Introdución a Java Persistence API (JPA)ASOCIACIONESCuando queremos mapear colecciones de entidades,debemos usar asociaciones. Estas asociaciones pueden serde dos tipos: - Asociaciones unidireccionales - Asociaciones bidireccionalesLas asociaciones unidireccionales reflejan un objeto que tieneuna referencia a otro objeto (la información puede viajar enuna dirección).Por el contrario, las asociaciones bidireccionales reflejan dosobjetos que mantienen referencias al objeto contrario (lainformación puede viajar en dos direcciones).
  15. 15. Introdución a Java Persistence API (JPA)Además del concepto de dirección, existe otro conceptollamado cardinalidad, que determina cuántos objetos puedenhaber en cada extremo de la asociación.
  16. 16. Introdución a Java Persistence API (JPA)ASOCIACIONES UNIDIRECCIONALES@Entity @Entitypublic class Cliente { public class Direccion { @Id @Id @GeneratedValue GeneratedValue private Long id; private Long id; @OneToOne private String calle; private Direccion private String ciudad;direccion; private String pais; private Integer // Getters y setters codigoPostal;} // Getters y setters }
  17. 17. Introdución a Java Persistence API (JPA)Otro tipo de asociación muy común es la de tipo uno-a-muchos (one-to-many) unidireccional.@Entitypublic class Cliente { @Id @GeneratedValue private Long id; @OneToMany private List direcciones; // Getters y setters}
  18. 18. Introdución a Java Persistence API (JPA)ASOCIACIONES BIDIRECCIONALESEn las asociaciones bidireccionales, ambos extremos de larelación mantienen una referencia al extremo contrario.En este caso, el dueño de la relación debe ser especificadoexplícitamente, de manera que JPA pueda realizar el mapeocorrectamente.
  19. 19. Introdución a Java Persistence API (JPA)Ejemplo de bidireccionalidad en una relación de tipouno-a-uno@Entity @Entitypublic class Mujer { public class Marido { @Id @Id @GeneratedValue @GeneratedValue private Long id; private Long id; @OneToOne @OneToOne private Marido marido; (mappedBy = "marido") private Mujer mujer; // Getters y setters }}
  20. 20. Introdución a Java Persistence API (JPA)PERSISTENCIA :El concepto de persistencia implica el hecho de almacenarnuestras entidades (objetos Java de tipo POJO) en unsistema de almacenamiento, normalmente una base de datosrelacional (tablas, filas, y columnas).Más allá del proceso de almacenar entidades en una base dedatos, todo sistema de persistencia debe permitir recuperar,actualizar y eliminar dichas entidades. Estas cuatrooperaciones se conocen como operaciones CRUD (Create,Read, Update, Delete - Crear, Leer, Actualizar, Borrar). JPAmaneja todas las operaciones CRUD a través de la interfaceEntityManager.
  21. 21. Introdución a Java Persistence API (JPA)PERSISTIR UNA ENTIDAD :public class Main { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("introduccionJPA"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); Pelicula pelicula = new Pelicula(); pelicula.setTitulo("Pelicula uno"); pelicula.setDuracion(142); tx.begin(); try { em.persist(pelicula); tx.commit(); } catch(Exception e) { tx.rollback() } em.close(); emf.close(); }}
  22. 22. Introdución a Java Persistence API (JPA)LEER UNA ENTIDADLeer una entidad previamente persistida en la base de datospara construir un objeto Java. Podemos llevar a cabo de dosmaneras distintas: - Obteniendo un objeto real - Obteniendo una referencia a los datos persistidosDe la primera manera, los datos son leídos (por ejemplo, conel método find()) desde la base de datos y almacenados enuna instancia de la entidad:Pelicula p = em.find(Pelicula.class, id);
  23. 23. Introdución a Java Persistence API (JPA)La segunda manera de leer una entidad nos permite obteneruna referencia a los datos almacenados en la base de datos,de manera que el estado de la entidad será leído de formademorada (en el primer acceso a cada propiedad), no en elmomento de la creación de la entidad:Pelicula p = em.getReference(Pelicula.class, id);
  24. 24. Introdución a Java Persistence API (JPA)ACTUALIZAR UNA ENTIDADMediante el método merge() de EntityManager podemostener nuestra entidad gestionada y sincronizadatx.begin();em.persist(pelicula);tx.commit();em.detach(pelicula);// otras operacionesem.merge(pelicula);
  25. 25. Introdución a Java Persistence API (JPA)ELIMINAR UNA ENTIDADem.remove(pelicula);Cuando existe una asociación uno-a-uno y uno-a-muchosentre dos entidades, y eliminas la entidad dueña de larelación, la/s entidad/es del otro lado de la relación no soneliminada/s de la base de datos (este es el comportamientopor defecto), pudiendo dejar así entidades persistidas sinninguna entidad que haga referencia a ellas.Estas entidades se conocen como entidades huérfanas. Sinembargo, podemos configurar nuestras asociaciones paraque eliminen de manera automática todas las entidadessubordinadas de la relación
  26. 26. Introdución a Java Persistence API (JPA)OPERACIONES EN CASCADAEste tipo de operaciones permiten establecer la forma en quedeben propagarse ciertos eventos (como persistir, eliminar,actualizar, etc) entre entidades que forman parte de unaasociación. La forma general de establecer cómo se realizarán estasoperaciones en cascada se define mediante el atributocascade de las anotaciones de asociación:@OneToOne(cascade = CascadeType.REMOVE)private Descuento descuento;
  27. 27. Introdución a Java Persistence API (JPA)CascadeType.PERSIST .REMOVE .MERGE .REFRESH .DETACH .ALLLa última constante, CascadeType.ALL, hace referencia atodas las posibles operaciones que pueden ser propagadas, ypor tanto engloba en si misma el comportamiento del resto deconstantes.También podemos configurar varias operaciones en cascadade la lista superior usando un array de constantesCascadeType:
  28. 28. Introdución a Java Persistence API (JPA)@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REMOVE, })private Descuento descuento;
  29. 29. LETS CODE !!!
  30. 30. Conceptos Avanzados de Java Persistence API (JPA)JPQL (Java Persistence Query Language - Lenguaje de Consulta dePersistencia en Java), un potente lenguaje de consulta orientado aobjetos que va incluido con JPA.JPQL BÁSICOJPQL nos permite realizar consultas en base a multitud de criterios(como por ejemplo el valor de una propiedad, o condicionesbooleanas), y obtener más de un objeto por consulta.SELECT p FROM Pelicula p
  31. 31. Conceptos Avanzados de Java Persistence API (JPA)SENTENCIAS CONDICIONALESEl primero de ellos es el de consulta condicional, el cual es aplicadoañadiendo la cláusula WHERE en nuestra sentencia JPQL.SELECT p FROM Pelicula p WHERE p.duracion < 120
  32. 32. Conceptos Avanzados de Java Persistence API (JPA)PARÁMETROS DINÁMICOSPodemos añadir parámetros dinámicamente a nuestras sentenciasJPQL de dos formas: por posición y por nombre. La sentenciasiguiente acepta un parámetro por posición (?1):SELECT p FROM Pelicula p WHERE p.titulo = ?1Y la siguiente, acepta un parámetro por nombre (:titulo):SELECT p FROM Pelicula p WHERE p.titulo = :titulo
  33. 33. Conceptos Avanzados de Java Persistence API (JPA)EJECUCIÓN DE SENTENCIAS JPQLEl lenguaje JPQL es integrado a través de implementaciones de lainterface Query.Dichas implementaciones se obtienen a través de nuestro queridoamigo EntityManager, mediante diversos métodos de factoría. Deestos, los tres más usados (y los únicos que explicaremos aquí) son:createQuery(String jpql)createNamedQuery(String name)createNativeQuery(String sql)
  34. 34. Conceptos Avanzados de Java Persistence API (JPA)CONSULTAS CON NOMBRE (ESTÁTICAS)Las consultas con nombre son diferentes de las sentencias dinámicas quehemos visto hasta ahora en el sentido de que una vez definidas, no puedenser modificadas: son leídas y transformadas en sentencias SQL cuando elprograma arranca por primera vez, en lugar de cada vez que sonejecutadas.Este comportamiento estático las hace más eficientes, y por tanto ofrecenun mejor rendimiento. Las consultas con nombre son definidas mediantemetadatos (recuerda que los metadatos se definen mediante anotaciones oconfiguración XML), como puedes ver en este ejemplo:@Entity@NamedQuery(name="buscarTodos", query="SELECT p FROM Peliculap")
  35. 35. Conceptos Avanzados de Java Persistence API (JPA)CONSULTAS NATIVAS SQLEl tercer y último tipo de consultas que nos queda por ver requiereuna sentencia SQL nativa en lugar de una sentencia JPQL:String sql = "SELECT * FROM PELICULA";Query query = em.createNativeQuery(sql);
  36. 36. Conceptos Avanzados de Java Persistence API (JPA)Las consultas SQL nativas pueden ser definidas de manera estáticacomo hicimos con las consultas con nombre, obteniendo los mismosbeneficios de eficiencia y rendimiento. Para ello, necesitamosutilizar, de nuevo, metadatos:@Entity@NamedNativeQuery(name=Pelicula.BUSCAR_TODOS, query="SELECT * FROM PELICULA")public class Pelicula { public static final String BUSCAR_TODOS = "Pelicula.buscarTodos"; ...}
  37. 37. Persistencia en la capa Web
  38. 38. JSTL (JavaServer pages Standard Tag Library)A partir de JSP 1.2. se introduce un conjunto delibrerías en la especificación, pasando a serestándar.JSTL consta de los siguientes grupos deetiquetas:http://java.sun.com/jsp/jstl/corehttp://java.sun.com/jsp/jstl/xmlhttp://java.sun.com/jsp/jstl/fmthttp://java.sun.com/jsp/jstl/sql
  39. 39. JSTL (JavaServer pages Standard Tag Library)Expression language (EL)JSTL define un lenguaje de expresiones (EL),que facilita enormemente el tratamiento deinformación.Las expresiones se indican de la forma${expresion).
  40. 40. JSTL (JavaServer pages Standard Tag Library)La librería core.En las páginas que la usen deberemos incluir la siguientedirectiva:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>out<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><br> <c:out value="1+2+3"/><br> <c:out value="${1+2+3}"/><br> <c:out value="${param.nombreParametro}"/><br> <c:out value="${sessionScope.variableDeSesion}"/>
  41. 41. JSTL (JavaServer pages Standard Tag Library)setGuarda información en una variable, tiene los siguientesatributos:- var. Nombre de la variable- scope. Ámbito de la variable, admite los valores page,session y application.<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:set var="variableDePagina" scope="page">Esta información se guarda en la página</c:set>${variableDePagina}
  42. 42. JSTL (JavaServer pages Standard Tag Library)ifProcesa el cuerpo de la etiqueta si la condición se evalúa acierto. La condición se indica en el atributotest.Ejemplo:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:if test="${empty param.nombre}">Parámetro ‘nombre’ no definido.</c:if>
  43. 43. JSTL (JavaServer pages Standard Tag Library)choose, when y otherwiseProcesa condiciones múltiples, se procesa el cuerpo delprimer when cuya condición especificada en elatributo test se evalúa a cierto. Si ninguna de las condiciones se cumple, se procesa elcuerpo de otherwise en caso de que aparezca.
  44. 44. JSTL (JavaServer pages Standard Tag Library)Ejemplo:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:choose><c:when test="${empty param.nombre}">Parámetro ‘nombre’ no definido.</c:when><c:otherwise>Valor del parámetro ‘nombre’:${param.nombre}</c:otherwise></c:choose>
  45. 45. JSTL (JavaServer pages Standard Tag Library)forEach y forTokens.forEach consta de los siguientes atributos:- items. Indica la colección sobre la que iterar- var. Indica el nombre de la variable donde se guardará el elemento encurso.- varStatus. Indica el nombre de la variable donde se guardará el estadode la iteración.En cada iteración, la variable indicada en var irá tomando el valor delelemento en curso.A través de la variable indicada en varStatus podemosacceder a las siguientes propiedades:- index. Posición del elemento en curso (comienza con 0).- count. Número de iteraciones (comienza con 1).- first. Valor booleano que indica si es la primera iteración.- last. Valor booleano que indica si es la última iteración.
  46. 46. JSTL (JavaServer pages Standard Tag Library)forTokens permite partir una cadena en fragmentos yrecorrer cada uno de éstos, consta de lossiguientes atributos:- items. Cadena que se quiere tokenizar.- var. Indica el nombre de la variable donde se guardará elfragmento en curso.- delims. Cadena con todos los caracteres que actúan comodelimitador.- varStatus. Indica el nombre de la variable donde seguardará el estado de la iteración.
  47. 47. JSTL (JavaServer pages Standard Tag Library) Ejemplo: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:forEach items="${header}" var="cabecera"> ${cabecera} </c:forEach> <% String []cadenas={"uno","dos","tres"}; pageContext.setAttribute("cadenas",cadenas); %> <c:forEach items="${pageScope.cadenas}" var="cadena"> ${cadena} </c:forEach>
  48. 48. JSTL (JavaServer pages Standard Tag Library)<c:forEach items="${param}" var="parametro">Nombre: ${parametro.key}Valor: ${parametro.value}</c:forEach><c:forTokens items="cero, uno, dos, tres, cuatro, cinco"var="token" varStatus="status" delims=",">${status.index}.- ${token}</c:forTokens>
  49. 49. JSTL (JavaServer pages Standard Tag Library)redirectRedirige a la dirección especificada en el atributo url, y abortael procesamiento de la página actual.Ejemplo:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:if test="${param.clave!=’secreto’}"><c:redirect url="login.jsp"/></c:if>
  50. 50. JSTL (JavaServer pages Standard Tag Library)Control de errores con catchCon <c:catch> podemos capturar excepciones, sin que seaborte la ejecución de la página alproducirse un error.<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:catch var="error01"><%=Integer.parseInt(request.getParameter("parametro"))%></c:catch><c:if test="${not empty error01}">Se produjo un error: ${error01}</c:if>
  51. 51. JSTL (JavaServer pages Standard Tag Library)La librería formattingContiene etiquetas que realizan diversas funcionesrelacionadas con formato y localización,comentamos únicamente formatDate y formatNumber.La directiva para poder utilizarla es:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
  52. 52. JSTL (JavaServer pages Standard Tag Library)formatDatePermite formatear fechas. Tiene, entre otros, los siguientesatributos:- type. Permite los valores time (sólo hora), date (sólo fecha)y both (ambos). El valor por defecto es date.-pattern. Permite controlar el formato, podemos ver cómoestructurarlo en la clasejava.text.SimpleDateFormat del API de Java.value. La fecha en sí o la variable que la contiene.
  53. 53. JSTL (JavaServer pages Standard Tag Library) Ejemplo <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix=" fmt" %> <%pageContext.setAttribute("fecha",new java.util.Date()); %> Hoy es: <fmt:formatDate value="${pageScope.fecha}" pattern="dd/MM/yyyy"/>
  54. 54. LETS CODE !!!
  55. 55. PREGUNTAS ?
  56. 56. WE ROCK JAVA !!!

×