Interactuar con el contenido de un tag
Artículo por Club Developers · 20 junio 2006
2057 vistas
Puede ser interesante interactuar con el cuerpo de una etiqueta. Por ejemplo, en el caso de un tag iterativo, podemos necesitar el número de iteración en el body.
Para ello, bastará con almacenar algunos elementos en algún scope (página, consulta, sesión, aplicación)...
Vamos a retomar el ejemplo de [iurl=90&all=0&fs=1129#1136]Crear un tag iterativo[/iurl] y pondremo el número de línea en el scope "page".
Nuestro código será ahora:
Explicación:
Uso:
Resultado:
Para ello, bastará con almacenar algunos elementos en algún scope (página, consulta, sesión, aplicación)...
Vamos a retomar el ejemplo de [iurl=90&all=0&fs=1129#1136]Crear un tag iterativo[/iurl] y pondremo el número de línea en el scope "page".
Nuestro código será ahora:
java
public class IterateTag extends TagSupport { Â private int count = 0; Â private int current = 0; Â public void setCount(int i) { Â Â Â count = i; Â } Â public int doStartTag() throws JspException { Â Â Â current = 0; Â Â Â if (current < count) { Â Â Â Â Â return Tag.EVAL_BODY_INCLUDE; Â Â Â } Â Â Â return Tag.SKIP_BODY; Â } Â public int doAfterBody() throws JspException { Â Â Â current++; Â Â Â if (current < count) { Â Â Â Â Â return IterationTag.EVAL_BODY_AGAIN; Â Â Â } Â Â Â return Tag.SKIP_BODY; Â } Â public int doEndTag() throws JspException { Â Â Â pageContext.removeAttribute("line"); Â Â Â return Tag.EVAL_PAGE; Â } }
Explicación:
- Antes de cada evaluación del cuerpo, ponemos en el scope "page" un atributo "line" que contiene un Integer con el número de línea en curso.
- En doEndTag(), borramos este atributo para no 'containar' inutilmente el resto de la página.
Uso:
html4strict
<p:iterate count="3">LÃnea número <%=pageContext.getAttribute("line")%></p:iterate>
Resultado:
dos
LÃnea número 0 LÃnea número 1 LÃnea número 2