Modificar el cuerpo de un tag

2123 vistas

Podemos modificar el cuerpo del Tag antes de escribirlo en la página JSP.

Por ejemplo, vamos ha hacer un Tag para impedir que una parte del código HTML sea interpretada por el navegador (es decir, reemplazaremos los carácteres < y >  por < y >...).

Vamos a usar para ello la lectura de buffer de la interfaz BodyTag heredando de su implementación BodyTagsupport:



java
  1. public class HtmlCodeTag extends BodyTagSupport {
  2.  
  3.   public int doStartTag() throws JspException {
  4.       return BodyTag.EVAL_BODY_TAG;
  5.   }
  6.  
  7.   public int doAfterBody() throws JspException {
  8.       try {
  9.           String bodyString = getBodyContent().getString();
  10.           bodyString = bodyString.replaceAll("<", "<");
  11.           bodyString = bodyString.replaceAll(">", ">");
  12.           bodyString = bodyString.replaceAll("\t", " ");
  13.           bodyString = bodyString.replaceAll("\n", "\n");
  14.           getPreviousOut().println(bodyString);
  15.       } catch (IOException e) {
  16.           throw new JspException (e);
  17.       }
  18.     return SKIP_BODY;
  19.   }
  20. }



En el TLD:



xml
  1. <tag>
  2.   <name>htmlCode</name>
  3.   <tagclass>HtmlCodeTag</tagclass>
  4. </tag>



Explicación:
El método doStartTag() devuelve BodyTag.EVAL_BODY_TAG para usar la "evaluación bufferizada" del cuerpo del Tag. En el método doAfterBody(), recuperamos el cuerpo del tagde tipo String. Ahora modificamos el String para reemplazar los carácteres "<", ">", "\t" y "\n" por código HTML. Luego mostramos la cadena transformada...

Nota: con JSP 1.2, BodyTag.EVAL_BODY_TAG está deprecated y se reemplaza por BodyTag.EVAL_BODY_BUFFERED.

Se usa asÃ:



html4strict
  1. <p:htmlcode>
  2.   <h1>Ejemplo HTML</h1>
  3.   <p>Un párrafo de texto con palabras en <b>negrita</b>,
  4.   y otras en <i>cursiva</i>...
  5.   </p>
  6. </p:htmlcode>



Obteniendo:



html4strict
  1. <h1>Ejemplo HTML</h1>
  2. <p>Un párrafo de texto con palabras en <b>negrita</b>,
  3. y otras en <i>cursiva</i>...
  4. </p>