JSP Custom Tags en Liferay

11-08-2011
 

La utilización de etiquetas personalizadas o librerias de Tags personalizadas nos permite separar aún mas la vista de la lógica de proceso y permite índices de reutilización de código mas altos.

Crear Tags personalizados es bastante sencillo, en este ejemplo nos crearemos el Tag , que obviamente servirá para crear paginaciones.

Lo primero que tenemos que hacer es crear el XML que nos definirá el tag, en este caso de llamará MyTags.tld y irá alojado en WEB-INF/src/META-INF . Tendrá esta pinta:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>ejemplos</shortname>
    <uri>http://lostsys.com/tld</uri>
    <info>Etiquetas de lostsys</info>

    <tag>
    <name>pagination</name>
        <tagclass>com.lostsys.tags.PaginationTag</tagclass>
        <bodycontent>empty</bodycontent>
        <info>Pagintation</info>

     <attribute>
         <name>iniText</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
     </attribute>
     <attribute>
         <name>urlTemplate</name>
         <required>true</required>

         <rtexprvalue>true</rtexprvalue>
     </attribute>
     <attribute>
         <name>pag</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
     </attribute>

     <attribute>
         <name>numPags</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
     </attribute>

    </tag>
</taglib>

Una vez tenemos declarado el tag ‘pagination’, en la URI ‘http://lostsys.com/tld’ con sus parámetros, pasamos a definir la classe que nos pintará el TAG, los mas practico es que la hagamos extender de ‘TagSupport’. Vemos que tiene los métodos accesores de escritura a los parametros definidos anteriormente y dos métodos mas ‘doStartTag’ y ‘doEndTag’.

public class PaginationTag extends TagSupport{
    private String iniText="";
    private String urlTemplate="";
    private int pag=0;
    private int numPags=0;

    public void setPag(int p) { pag = p; }
    public void setNumPags(int p) { numPags = p; }
    public void setUrlTemplate(String s) { urlTemplate = s; }
    public void setIniText(String s) { iniText = s; }

    public int doStartTag() throws JspException {
        try{
             urlTemplate=urlTemplate.replace("%24pag","$pag");
             String s="";

             s+="<div class='paginacioDiv'>";
             s+="<strong> "+iniText+"    </strong>";

             /* Pintamos el HTML */

             s+="</div>";

             pageContext.getOut().print( s );

        } catch (Exception e) {
             throw new JspException ("Error: IOException" + e.getMessage());
         }

        return SKIP_BODY;
     }

    public int doEndTag() throws JspException {
        return SKIP_PAGE;
     }
}

Finalmente ya podemos hacer uso de nuestro tag:

<%@ taglib uri="http://lostsys.com/tld" prefix="ls" %>

<ls:pagination iniText="<%=iniText %>" urlTemplate='<%=urlTemplate %>' pag="<%=pag %>" numPags="<%=numPagines %>"/>

Comments

2 Responses to “JSP Custom Tags en Liferay”
  1. Santiago says:

    Esto se podria usar para pegar el coodigo de google tag manager a un portal en liferay? es la mejor opcion?

  2. Hola Santiago,

    No, lo de Google Tag Manager tendrías que ponerlo en el Theme para que te apareciera en cada página o en la configuración del sitio->avanzado tienes un sitio donde ponerlo también(Si prefieres no tocar el theme).

    Buen fin de semana,

Leave a Reply

© Albert Coronado Calzada