====== JSTL ====== * Es un framework de etiquetas predefinidas para JSP. * Debemos descargarnos el archivo //taglibs// de jakarta. Una vez lo tengamos deberemos descomprimirlo y en la carpeta de nuestra aplicación **/WEB-INF** colocaremos los .tld, en **/WEB-INF/lib** deberemos colocar los .jar. De esa forma serán accesibles en todo el proyecto. * Para usarlas tendremos que hacer un include, ya sea en nuestro archivo de código .jsp o en el web.xml: En nuestro código: <%@ taglib uri="http://jakarta.apache.org/taglibs/{library}" prefix="x" %> <%@ taglib prefix="c" uri="/WEB-INF/c-rt.tld" %> En el web.xml: http://jakarta.apache.org/taglibs/{library} /WEB-INF/{library}.tld * Un ejemplo de uso básico es el siguiente: <%@ taglib prefix="c" uri="/WEB-INF/c-rt.tld" %> ===== Indice de etiquetas ===== * **core:** Incluye tags de control de flujo tales como forEach, choose o if. * **format:** Incluye tags para formatear fechas y números (formatNumber, formatDate, parseNumber, parseDate...) como textos en lenguajes específicos (message, setBundle, setLocale...). * **sql:** Incluye tags para conexiones a bases de datos. * **functions:** Incluye funciones para el tratamiento de cadenas (split(), replace(), join(), trim()...). * **xml:** Incluye tags para interpretar datos en formato xml. ===== Incluir etiquetas ===== Podremos incluir etiquetas a nuestro .jsp o podremos incluirlas en nuestro fichero //web.xml//, para que sean accesibles desde cualquier parte de nuestra aplicación. ==== Externas a nuestra aplicación ==== <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/fn" %> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> ==== Internas en nuestra aplicación ==== <%@ taglib prefix="fmt" uri="/WEB-INF/fmt.tld" %> <%@ taglib prefix="html" uri="/WEB-INF/struts-html-el.tld" %> ===== Ejemplos de salida y control de código===== Tendrás que hacer la siguiente inclusión: <%@ taglib prefix="c" uri="/WEB-INF/c-rt.tld" %> ==== Definir y usar una variable ==== ${car} ==== Mostrar valores ==== ==== Ifs ==== cierto!!! ==== Control de errores ==== ${10/0} Error: ==== If...Else ==== Solo uno Varios ===== Bucles ===== ==== forEach ==== Para mostrar el uso del forEach añadiremos este código al servlet, al llamar al servlet se enviará a nuestra página jsp un array de integers: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { java.util.ArrayList array = new ArrayList(); java.util.Random rnd = new Random(); for (int i=0; i<20; i++) array.add(rnd.nextInt(100)); request.setAttribute("myArray", array); request.getRequestDispatcher("pp.jsp").forward(request, response); } Se ha realizado una conversión implícita del objeto stat que en el bucle es un //javax.servlet.jsp.jstl.core.LoopTagSupport// y nosotros, mediante el atributo type, lo pasamos a //javax.servlet.jsp.jstl.core.LoopTagStatus//. De este objeto contiene varios métodos que pueden sernos útiles: * **getCurrent**() Devuelve el objeto de la actual iteración * **getCount**() Devuelve el número de iteración * **isFirst**() Indica si es el primero, también existe **isLast**() * **getFirst**() Retorna el objeto pasado en el atributo begin del bucle, si este no ha sido indicado retornará null. También existe **getEnd**() * **getStep()** Retorna el valor del atributo step, null si no se ha especificado ninguno. ==== forTokens ==== Recorre un string, cada iteración será un elemento de este que será separado por los carácteres indicados en el atributo //delims//.
===== Ejemplos de formateo y parseo ===== Tendrás que hacer la siguiente inclusión: <%@ taglib prefix="fmt" uri="/WEB-INF/fmt-rt.tld" %> Con el fmt, a parte de dar formato a los datos, también podrás recoger un valor en string y **convertirlo** a integer o a date, para ello tendrás que utilizar las tags //**fmt:parseNumber**// y //**fmt:parseDate**//. ==== Formatear valores numéricos ==== Podemos hacerlo de dos formas: //número// o ////. Los atributos que acepta son: * **type** : [number|currency|percent] Indica el tipo de formato que aplicará. * **currencyCode** : El código que se aplicará cuando se formateen divisas. También existe **currencySymbol** * **groupingUsed** : [true|false] Indica si se agrupará el número por partes: 1.000.200 o 10002000. * **minIntegerDigits** : Número con el mínimo de cifras representado, si necesita menos serán sustituidas por 0 a la izquierda. También existe **maxIntegerDigits**. * **maxFractionDigits** : Número de decimales máximo. También existe **minFractionDigits**. * **var** : La variable donde se volcará el resultado, si se especifica este atributo el resultado del formato no saldrá por la salida hasta que no saquemos dicha variable. * **scope** : De los scope de toda la vida * **pattern** : Indica un formato avanzado, de esta forma es posible personalizarlo; ello lo conseguimos siguiendo la siguiente tabla: {{sp:j2ee:jstl:patterntable2.png|}} ==== Formatear fechas ==== Igual que con números, pero usando fmt:formatDate. Atributos: * **value** * **type** [date|time|both] * **dataStyle** [default|short|medium|long|full] * **timeStyle** [default|short|medium|long|full] * **timeZone** * **var** * **scope** * **pattern** La tabla para el formato personalizado de fecha es distinta. Es la siguiente: {{sp:j2ee:jstl:patterntable1.png|}} ===== Lectura de XML ===== ==== XML de ejemplo ==== John Smith T 88 B James Smith K 92 A Kelly Lane A 72 C ==== Tag c:import ==== La tag //c:import// vuelca sobre una variable el contenido de un fichero. Nos va de puta madre para volcar un archivo .xml sobre una variable: ===== Notas ===== * El //// también tiene un atributo llamado //escapeXml//, si se pone a false cuando queramos escribir un carácter prohibido (&, <, >...) se escribirá, sino se codificará para el xhtml de la página. * Otra tag es //// que elimina una variable asignada con c:set, para variables en las que su scope no sea la aplicación no es necesario eliminarlas, acabarán eliminandose solas.