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:
<taglib> <taglib-uri>http://jakarta.apache.org/taglibs/{library}</taglib-uri> <taglib-location>/WEB-INF/{library}.tld</taglib-location> </taglib>
<%@ taglib prefix="c" uri="/WEB-INF/c-rt.tld" %> <c:out value="hola" />
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.
<%@ 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" %>
<%@ taglib prefix="fmt" uri="/WEB-INF/fmt.tld" %> <%@ taglib prefix="html" uri="/WEB-INF/struts-html-el.tld" %>
Tendrás que hacer la siguiente inclusión:
<%@ taglib prefix="c" uri="/WEB-INF/c-rt.tld" %>
<c:set var="car" value="renault" scope="page" />
${car}
<c:out value="coche"></c:out> <c:out value="${car}" default="ferrari"></c:out> <c:out value="${pageContext.request.method}" /> <c:out value="${param.msg}" />
<c:if test="${1==1}"> cierto!!! </c:if> <c:if test="$(1==1)" var="result" /> <c:out value="${result}" />
<c:catch var="exc"> ${10/0} <c:if test="${exc!=null}"> Error: <c:out value="${exc}" /> </c:if> </c:catch>
<c:choose> <c:when test="${param.number == 1}">Solo uno</c:when> <c:otherwise>Varios</c:otherwise> </c:choose>
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<Integer> array = new ArrayList<Integer>(); 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); }
<c:forEach begin="0" end="10" step="1" items="${myArray}" var="i"> <c:out value="${i}"></c:out> </c:forEach>
<c:forEach items="${myArray}" var="i" varStatus="stat"> <jsp:useBean id="stat" type="javax.servlet.jsp.jstl.core.LoopTagStatus" /> <c:if test="${stat.count %2 == 0}"><font color="grey"></c:if> <c:if test="${stat.count %2 != 0}"><font color="black"></c:if> <c:out value="${i}"></c:out> </font> </c:forEach>
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:
Recorre un string, cada iteración será un elemento de este que será separado por los carácteres indicados en el atributo delims.
<c:set var="phrase" value="Hola, estoy en el trineo de SantaClous; me lo estoy pasando muy bien. Hasta luego." /> <c:forTokens items="${phrase}" var="i" delims=",.;"> <c:out value="${i}"></c:out> <br /> </c:forTokens>
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.
Podemos hacerlo de dos formas: <fmt:formatNumber atributos>número</fmt:formatNumber> o <fmt:formatNumber value=“número” atributos/>. Los atributos que acepta son:
<fmt:formatNumber value="14525.2334" type="number" groupingUsed="true" maxFractionDigits="2" var="r"/> <c:out value="${r}" />
Igual que con números, pero usando fmt:formatDate. Atributos:
<jsp:useBean id="now" class="java.util.Date"/> <fmt:formatDate value="${now}" type="time" timeStyle="medium" /> <fmt:formatDate value="${now}" type="date" dateStyle="full" />
<?xml version="1.0" encoding="ISO-8859-1"?> <students> <student id="1"> <name> <first>John</first> <last>Smith</last> <middle>T</middle> </name> <grade> <points>88</points> <letter>B</letter> </grade> </student> <student id="2"> <name> <first>James</first> <last>Smith</last> <middle>K</middle> </name> <grade> <points>92</points> <letter>A</letter> </grade> </student> <student id="3"> <name> <first>Kelly</first> <last>Lane</last> <middle>A</middle> </name> <grade> <points>72</points> <letter>C</letter> </grade> </student> </students>
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:
<c:import url="http://www.google.es" var="google" /> <c:out value="${google}" escapeXml="false" /> <c:import url="students.xml" var="docXml" /> <c:out value="${docXml}" escapeXml="true" />