You are on page 1of 11

Manual Bsico JSTL

JSTL parte I
JSTL que significa (Java Standard Tag Library), en espaol (Librera Estndar de
Etiquetas), es una biblioteca de libreras para implementar algunas funciones, que son
definidas mediante un lenguaje de expresiones de la forma ${expresion}
Extrado del curso de Java de Ciberaula http://java.ciberaula.com/articulo/introduccion_jstl/
Ventajas y Desventajas de JSTL
Las etiquetas JSTL son XML, estas etiquetas se integran limpia y uniformemente a
las etiquetas HTML.
Las 4 libreras de etiquetas JSTL incluyen la mayora de funcionalidad que ser
necesaria en una pgina JSP. Las etiquetas JSTL son muy sencillas de usarlas para
personas que no conocen de programacin, a lo mucho necesitarn conocimientos
de etiquetas del estilo HTML.
Las etiquetas JSTL encapsulan la lgica como el formato de fechas y nmeros.
Usando los scriptlets JSP, esta misma lgica necesitara ser repetida en todos los
sitios donde es usada, o necesitara ser movida a Clases de ayuda.
Las etiquetas JSTL pueden referenciar objetos que se encuentren en los ambientes
Request y Session sin conocer el tipo del objeto y sin necesidad de hacer el Casting.
Los JSP EL (Expression Language) facilitan las llamadas a los mtodos Get y Set
en los objetos Java. Esto no es posible en la versin JSP 1.2, pero ahora est
disponible en JSP 2.0. EL es usado extensamente en la librera JSTL.
Desventajas de los JSTL
Los JSTL pueden agregar mayor sobrecarga en el servidor. Los scriptlets y las
libreras de etiquetas son compilados a servlets, los cuales luego son ejecutados por
el contenedor. El cdigo Java embebido en los scriptlets es bsicamente copiado en
el servlet resultante. En cambio, las etiquetas JSTL, causan un poco ms de cdigo
en el servlet. En la mayora de casos esta cantidad no es mensurable pero debe ser
considerado.
Los scriptlets son ms potentes que las etiquetas JSTL. Si desea hacer todo en un
script JSP pues es muy probable que insertar todo el cdigo en Java en l. A pesar
que las etiquetas JSTL proporciona un potente conjunto de libreras reutilizables,
no puede hacer todo lo que el cdigo Java puede hacer. La librera JSTL est
diseada para facilitar la codificacin en el lado de presentacin que es tpicamente
encontrado en la capa de Vista si hablamos de la arquitectura Modelo-Vista-
Controlador.

Existen 4 tipos de etiquetas dentro de JSTL, que son:
Core(c.tld): es una librera que implementa acciones bsicas de JSTL, entre las
que se encuentran: ciclos, definicin de variables, condicionales y otras
funcionalidades
El identificador de esta etiqueta es http://java.sun.com/jstl/core , debe incluirse de
la siguiente forma en nuestras pginas JSP
<%@ taglib uri=http://java.sun.com/jstl/core prefix="c%>

Internacionalizacin y formato(fmt.tld): es una librera que realiza funciones
relacionadas al formato de elementos dentro de JSP's, estos formatos incluyen
aquellos para Fechas, Monedas y Nmeros.

El identificador de esta librera es: http://java.sun.com/jstl/fmt, que debe incluirse
en las paginas JSP de esta forma
<%@ taglib uri=http://java.sun.com/jstl/fmt prefix="fmt" %>

Xml(xml.tld): comprende el procesamiento de archivos XML, se emplea en la
manipulacin de archivos XML dentro de JSPs.

<%@ taglib uri= http://java.sun.com/jsp/jstl/xml prefix=x %>

Slq: Comprende el acceso a base de datos dentro de una JSP.

<%@ taglib uri= http://java.sun.com/jstl/sql prefix=x %>


Para utilizar las etiquetas de JSTL, es necesario contar con las siguientes libreras
jstl.jar: Este JAR contiene las clases empleadas por tags JSTL.
standard.jar Este JAR contiene la implementacin de tags JSTL

Las libreras del jstl tienen que encontrarse dentro de la carpeta WEB-INF/lib
o Jstl_Project
o Build
o Java Resources: src
o WebContent
META-INF
WEB-INF
- lib
- web.xml

Utilizacin de la librera Core Parte II
Vamos a utilizar las diferentes acciones de propsito general con las que cuenta CORE, como
son out, if, foreach, etc.

1. OUT
Esta etiqueta muestra cualquier informacin en pantalla, es como el System.out.print() en
Java SE, o echo en PHP, est constituido por las variables:
value: es la expresin a mostrar
default: valor por defecto si es null

Primero tenemos que declarar la librera de JSTL dentro de nuestro archivo JSP
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Ej.
<c:out value="Hola JAVA EE"/>
La suma de 3+6 es <c:out value="${3+6}"/>
<c:out value="${null}" default="este valor es NULL"/>

2. SET
Esta etiqueta sirve para declarar variables, que est formado por los atributos
var: Nombre de la variable
value: Valor de la variable
scope: Ambito de la variable

Ej. Declaramos la variable con el nombre message, y lo mostramos
<c:set var="message" value="Bienvenido a JSTL"/>
<c:out value="${message}"/>
<c:set var="var1" value="${12*5}"/>
<c:set var="var2">
<c:out value="${12*5}" />
</c:set>
<c:out value="La multiplicacin de 12*5 es: ${var1} y ${var2}" />

<c:set var="var3" scope="session">
<c:out value="${12%5}" />
</c:set>
<c:out value="el modulo de 12 y 5 es: ${sessionScope.var3}" />



3. REMOVE
Esta etiqueta es lo contrario de SET, eliminar una variable creada.
Ej.
<c:remove var="var1"/>


4. IF
Esta etiqueta sirve para realizar condiciones simples

Ej.
<c:set var="nota" value="${86}"/>
<c:if test="${nota >= 71}">
Aprobado
</c:if>
<c:if test="${nota >= 95 and nota<=100}">
Excelente
</c:if>

<c:set var="fruta" value="naranja"/>

<c:if test="${fruta=='lima'}" var="var_lima">
La fruta es Lima
</c:if>


<c:if test="${not var_lima}">
<c:if test="${fruta=='naranja'}" var="var_nar">
La fruta es naranja
</c:if>

<c:if test="${not var_nar}">
Fruta desconocida
</c:if>
</c:if>


5. CATCH
Esta etiqueta se utiliza, para controlar las excepciones que se pueden producir.
Ej.
<c:catch var="exception">
<c:out value="${8/0}"/>
</c:catch>

<c:if test="${not exception}">
Ha ocurrido una Excepcin
</c:if>


6. CHOOSE
La etiqueta choose sirve para multiples condiciones, la condicin se realiza mediante la
sentencia when, si ninguna de las condiciones es verdadero, entonces se procesa el cuerpo
otherwise.
Ej.
<c:set var="dia" value="3"/>
<c:choose>
<c:when test="${dia==1}">Lunes</c:when>
<c:when test="${dia==2}">Martes</c:when>
<c:when test="${dia==3}">Miercoles</c:when>
<c:when test="${dia==4}">Jueves</c:when>
<c:when test="${dia==5}">Viernes</c:when>
<c:when test="${dia==6}">Sabado</c:when>
<c:when test="${dia==7}">Domingo</c:when>
<c:otherwise>
El valor <c:out value="${dia}"/> no corresponde a ningun Da
</c:otherwise>
</c:choose>



7. FOREACH
Esta etiqueta esta constituido por los siguientes atributos
var: indica el nombre de la variable
begin: es el valor inicial de la iteracin
end: valor final de la iteracin
step: incremento de la variable
tems: indica a una coleccin o array, sobre la cual se va a iterar
varStatus: es el nombre de la variable donde se va aguardar el estado de la
iteracin.
Ej.
<c:forEach var="i" begin="0" end="10" step="1">
<c:out value="Nmero ${i}" />
</c:forEach>
<c:forEach items="${listaEmpleados}" var="list">
<c:out value="Nombre ${list.nombre}"/>
</c:forEach>
<% String nombres[] = {"Marisol","Josue","Elissa"};
pageContext.setAttribute("var_nombre",nombres);%>
<c:forEach var = "v_nom" items="${var_nombre}" varStatus= "estado">
<c:out value="${estado.index}"/>
<c:out value="${v_nom}"/>
</c:forEach>


8. FORTOKENS
Esta etiqueta es igual a foreach, pero itera por marcas que son separados por delimitadores.
El atributo que se utiliza para delimitar es delims,
Ej
<c:set var="var_dias"
value="Lunes;Martes;Miercoles;Jueves;Viernes;Sabado;Domingo"/>

<c:forTokens var = "v_dia" items="${var_dias}" delims=";"
varStatus= "estado">

<c:out value="${estado.index}"/>
<c:out value="${v_dia}"/>

</c:forTokens>



9. REDIRECT
Esta eiqueta sirve para redireccionar a otra pagina web
Ej.
<c:if test="${menu==ayuda}">
<c:redirect url="help.jsp"/>
</c:if>



10. URL y PARAM
Esta etiqueta se utiliza para imprimir una direccin URL, enviando parmetros con la etiqueta
param
Ej.
<c:url var="url_hola" value="hola.jsp">
<c:param name="nombre" value="Roxana"/>
<c:param name="apellidos" value="Gutierrez"/>
</c:url>
<a href="<c:out value="${url_hola}" />">hola</a>

Ejemplo
Crear la matriz rombo mediante JSTL
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1
La solucin es:
<c:set var="n" value="11"/>
<c:if test="${n%2==0}">
<c:set var="k" value="${(n/2) +1}"/>
</c:if>

<c:if test="${n%2!=0}">
<c:set var="k" value="${(n/2) -0.5 +1}"/>
</c:if>

<c:set var="a" value="${k}"/>
<c:set var="b" value="${k}"/>

<c:out value="K ${k}" /><br/>
<c:forEach var="i" begin="1" end="${n}" step="1">
<c:set var="c" value="1"/>
<br/>

<c:if test="${a>1}">
<c:forEach var="j" begin="1" end="${a-1}">
<c:out value="${'0'} "/>
</c:forEach>
</c:if>

<c:forEach var="j" begin="${a}" end="${b}" step="1">
<strong><c:out value="${c}"/></strong>
<c:if test="${j<k}" var="var_if_1">
<c:set var="c" value="${c+1}"/>
</c:if>
<c:if test="${not var_if_1}">
<c:set var="c" value="${c-1}"/>
</c:if>
</c:forEach>
<c:if test="${i<k}" var="var_if_2">
<c:set var="a" value="${a-1}"/>
<c:set var="b" value="${b+1}"/>
</c:if>
<c:if test="${not var_if_2}">
<c:set var="a" value="${a+1}"/>
<c:set var="b" value="${b-1}"/>
</c:if>
</c:forEach>

Utilizacin de la librera Formatting Parte III
Esta librera se encarga de formatear fechas y nmeros.
Primero tenemos que declarar la librera de JSTL dentro de nuestro archivo JSP
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

1. FormatDate
La etiqueta formatDate, nos ayuda a formatear fechas, esta constituido por loa atributos
siguientes.
Type: permite el tipo a formatear, time=hora, date=fecha, both=ambos
Pattern: permite controlar el formato
Value: la fecha o variable a formatear.

Ej.
<%
pageContext.setAttribute("fecha", new java.util.Date());
%>
Fecha Actual:
<fmt:formatDate
value="${pageScope.fecha}"
pattern="dd/MM/yyyy" />

Hora Actual:
<fmt:formatDate
value="${pageScope.fecha}"
pattern="HH:mm:ss" />

La salida respectivamente del formateo es
Fecha Actual: 02/02/2011
Hora Actual: 12:59:40
Patterns de Fecha y hora, tabla extraida de la documentacin oficial de JAVA
Letter Date or Time
Component
Presentation Examples
G
Era designator Text
AD
y
Year Year 1996; 96
M
Month in year Month July; Jul; 07
w
Week in year Number
27
W
Week in month Number
2
D
Day in year Number
189
d
Day in month Number
10
F
Day of week in month Number
2
E
Day in week Text Tuesday; Tue
a
Am/pm marker Text
PM
H
Hour in day (0-23) Number
0
k
Hour in day (1-24) Number
24
K
Hour in am/pm (0-11) Number
0
h
Hour in am/pm (1-12) Number
12
m
Minute in hour Number
30
s
Second in minute Number
55
S
Millisecond Number
978
z
Time zone General time zone Pacific Standard Time; PST; GMT-
08:00
Z
Time zone RFC 822 time
zone
-0800
' Escape for text Delimiter
' ' Single quote Literal '

Ej.
<fmt:formatDate
value="${pageScope.fecha}"
pattern="EEEE, dd 'de' MMMM 'de' yyyy" />

La salida que va a mostrar es mircoles, 02 de febrero de 2011


2. formatNumber
Con esta etiqueta podemos dar formato a valores numricos, que est formado por los
siguientes atributos:

value: valor numrico a formatear
pattern: controla el tipo de formato.


Patterns de Fecha y hora, tabla extraida de la documentacin oficial de JAVA
Letter Date or Time Component
0
a digit
#
a digit, zero shows as absent
.
placeholder for decimal separator
,
placeholder for grouping separator.
;
separates formats.
-
default negative prefix.
%
multiply by 100 and show as percentage
?
multiply by 1000 and show as per mille




Ej.
<c:set var="numero">3.1415926535897932384626433832795</c:set>
<fmt:formatNumber value="${numero}" pattern="#"/>
<fmt:formatNumber value="${numero}" pattern="#.###########"/>
<fmt:formatNumber value="${numero}" pattern="#.00000000000"/>
<fmt:formatNumber value="${numero}" pattern="00000000"/>
<fmt:formatNumber value="${numero/5}" pattern="0000000.000"/>
La salida del nmero formateado es:
3
3,14159265359
3,14159265359
00000003
0000000,628



Utilizacin de la librera SQL Parte IV

La librera sql del JSTL es utilizado para el acceso a base de datos, no es recomendable
utilizarlo ya que no cumple con la arquitectura MVC (Modelo Vista Controlador).
Para entender mejor el funcionamiento de esta librera, vamos a realizar una conexin al
motor de Base de Datos PostgreSQL, para eso necesitamos adicionar a nuestro proyecto el
Driver de Postgres, dentro de la carpeta lib, donde ya se encuentran las libreras de JSTL.
Comencemos, declarando las libreras de core y sql, dentro de nuestra pgina JSP.

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>

Para la configurar la conexin a la base de datos, se hace uso de la etiqueta setDataSource,
que nos permite definir la informacin de la fuente de datos.
<sql:setDataSource var="ds" driver="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/prueba" user="user"
password="xxx" />
donde
driver: el nombre del driver.
url: la direccin url de nuestro servidor
user: usuario de la base de datos.
password: contrasea del usuario


Leer datos de la Base de Datos
La etiqueta transaction es utilizada para realizar una serie de instrucciones SQL como
SELECT, INSERT, UPDATE, DELETE, en una sola consulta.
Para crear la instruccin SQL SELECT, vamos a hacer uso de la etiqueta query, que realiza
una consulta SQL, y retorna un grupo de resultados.
<sql:transaction dataSource="${ds}">
<sql:query var="listUsuarios">
SELECT id_usuario, login, password FROM usuarios;
</sql:query>
</sql:transaction>


Para realizar consultas utilizando parmetros, se debe hacer uso de la etiqueta param, dentro
de la etiqueta query.
<c:set var="id_u" value="2"/>

<sql:query var="listUsuariosParam">
SELECT id_usuario, login, password FROM usuarios WHERE id_usuario=?;
<sql:param value="${id_u}" />
</sql:query>
Para mostrar los datos de la consulta realizada, vamos a utilizar JSTL CORE
<table border=1>
<c:forEach var="row" items="${listUsuarios.rows}">
<tr>
<td><c:out value="${row.id_usuario}" /></td>
<td><c:out value="${row.login}" /></td>
<td><c:out value="${row.password}" /></td>
</tr>
</c:forEach>
</table>
Insertar datos en la base de datos
Para utilizar la instruccin SQL INSERT, haremos uso de la etiqueta update, que nos permite
actualizar una fila de la base de datos.
<sql:transaction dataSource="${ds}">
<sql:update var="insertLogin">
INSERT INTO usuarios (login, password) VALUES(?, ?)
<sql:param value="${v_login}" />
<sql:param value="${v_password}" />
</sql:update>
</sql:transaction>

Para la instruccin SQL UPDATE y DELETE, serian:
<sql:update var="updateLogin">
UPDATE usuarios SET
login = ?,
password = ?
WHERE id_usuario = ?
<sql:param value="${id_u}" />
</sql:update>


<sql:update var="deleteLogin">
DELETE FROM usuarios
WHERE id_usuario = ?
<sql:param value="${id_u}" />
</sql:update>