Crear un tag iterativo

1917 vistas

Para crear un tag iterativo, tendremos que implementar la interfaz IterationTag.
Sin embargo, TagSupport ya implementa esta interfaz, por lo que podremos extender esta clase para veneficiarnos de los métodos por defecto...

Nuestro tag iterativo hará un cierto número de veces un bucle según un parámetro count.

Su mapping será:



xml
  1. <tag>
  2.   <name>iterate</name>
  3.   <tagclass>IterateTag</tagclass>
  4.   <bodycontent>JSP</bodycontent>
  5.   <attribute>
  6.     <name>count</name>
  7.     <required>true</required>
  8.   </attribute>
  9. </tag>



Y su código:



java
  1. public class IterateTag extends TagSupport {
  2.  
  3.   private int count = 0;
  4.   private int current;
  5.  
  6.   public void setCount(int i) {
  7.       count = i;
  8.   }
  9.  
  10.   public int doStartTag() throws JspException {
  11.       current = 0;
  12.       if (current < count)
  13.           return Tag.EVAL_BODY_INCLUDE;
  14.       return Tag.SKIP_BODY;
  15.   }
  16.  
  17.   public int doAfterBody() throws JspException {
  18.       current++;
  19.       if (current < count)
  20.           return IterationTag.EVAL_BODY_AGAIN;
  21.       return Tag.SKIP_BODY;
  22.   }
  23. }



Explicación :

  • El atributo count contendrá tendrá el valor del atributo de la etiqueta.
    No tendremos que hacer ningún tipo de conversión String/int porque ésta es automática devido a que el mutador tiene como parámetro un int.
    En caso de valor incorrecto, lanzamos una excepción.
  • En doStartTag(), inicializamos current que tendrá el número de líneas mostradas. Es importante iniciallizarlo en doStartTag() porque la misma instancia de Tag puede ser usada varias veces.

Uso:



html4strict
  1. <p:iterate count="3">Esta línea se mostrará varias veces</p:iterate>



Resultado:



delphi
  1. Esta línea se mostrará varias veces
  2. Esta línea se mostrará varias veces
  3. Esta línea se mostrará varias veces