Definir/modificar variables de script en un Tag

2104 vistas

Es posible definir o modificar variables de script vía un Tag JSP.

En el ejemplo [iurl=90&all=0&fs=1129#1137]Interactuar con el contenido de un tag[/iurl], la interacción entre el Tag y la página JSP se hacÃa recuperando la referencia del objeto con un getAttribute().
Para permitir el uso de una variable de script, vamos a crear una clase que extienda TagExtraInfo:



java
  1. public class IterateTEI extends TagExtraInfo {
  2.  
  3.   public VariableInfo[] getVariableInfo(TagData data) {
  4.       VariableInfo[] info = new VariableInfo[1];
  5.       info[0] = new VariableInfo ("line", "java.lang.Integer", true, VariableInfo.NESTED);
  6.       return info;
  7.   }
  8. }



Explicación:

El método getVariableInfo() permite definir variables de script creadas o modificadas por el Tag. Devuelve una tabla de VariableInfo, de cuatro elementos:

  • El nombre de la variable de script.
  • El nombre del tipo del objeto de la variable.
  • Un booleano que indica si es una nueva variable o no (es decir, si tiene que ser o no declarada).
  • El último parámetro define el bloque en el que la variable será accesible, pudiendo tomar los valores siguientes:
     
     
  • VariableInfo.AT_BEGIN: la variable se define al inicio del tag y accesible hasta el final del bloque que contiene el tag.
     
  • VariableInfo.AT_END: la variable se define al final del tag y es accesible hasta el fin del bloque que contiene el tag.
     
  • VariableInfo.NESTED: la variable se define al inicio del tag y es accesible sólo en el cuerpo del tag.
     

Atención: el nombre de la variable de scrip tiene que corresponder a un elemento de uno de los scope (en el orden: page, request, session, application).
La variable de script se sincroniza con su equivalente en el scope, por lo que puede haber un conflicto si se usa el mismo nombre en dos scopes diferentes.

Para poder usar esta variable, tendremos que añadir la etiqueta en la definición del tag en el TLD:



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



Para usarla:



html4strict
  1. <p:iterate count="3">LÃnea número <%=line%> </p:iterate>



Resultado:



dos
  1. LÃnea número 0
  2. LÃnea número 1
  3. LÃnea número 2



Nota:
El método getVariableInfo() tiene un TagData que permite acceder a los atributos del tag, para poder cambiar dinámicamente el nombre de la scriplet según un atributo por ejemplo.