Duda con JSP Tags

Elektr0_ddr

Buenas,
Primero os comento que he hecho, que quiero hacer y después pregunto si se puede jaja

He hecho un jsp tag para incluir script javascripts en mis vistas (jsp), básicamente lo que harán es comprobar que dicho script no ha sido incluido previamente y en caso de no haber sido incluido lo pintarán tal cual, donde se haya hecho la llamada al tag. Un ejemplo:

<html>
   <head>
      <tag:script nombre="jquery"/>
   </head>
   <body>
      <tag:script nombre="jquery"/>
      <tag:script nombre="jquery-ui"/>
   </body>
</html>

En este ejemplo se debería pintar el script a la librería jquery en el head, pero no en el body, ya que mediante variables en el contexto de la página, el tag es capaz de saber si ese script ya ha sido incluido o no.
El script de jquery-ui se incluiría en el body.

Quiero hacer esto mismo que tengo hecho hasta ahora, pero pudiendo reunir los scripts (lo que escriben en la página los jsptags) en el head para no tenerlos desperdigados por la página.

Se me han ocurrido dos ideas disparatadas, que a primera vista me suenan a chiste.

Opción 1: Tener los tags por cualquier parte de la página como en el ejemplo de arriba, pero que unicamente metan variables en algún lado, para que otro jsptag que se ejecutará DESPUES, pero en el HEAD (vease la problematica, desde mi conocimiento) se encargará de leer lo que los <tag:script> anteriores (en el tiempo, no en el jsp) han ido dejando en el contexto y escribiendo en el head en consecuencia.

Opción 2: Hayar una manera de que los <tag:script> escriban en el documento html, en el head, en vez de escribir la salida en el lugar donde se encuentran.

Hay alguna manera de conseguir esto? Hay algún patrón que se suela usar para estos casos y estoy haciendo el mongo? jajaja

Gracias por su atención =)

JuAn4k4

Haz un tag que englobe a todo, en plan contenedor (un tag)

y desde todos los demás metes un findAncestorWithClass(Contenedor.class).addScript(...), ( se me ocurre vamos...)

Elektr0_ddr

Pero eso en cuanto a rendimiento sería una locura no? Si hay 10 <tag:script> a lo largo del jsp incluso por la zona más baja, recargar 10 veces el jsp con todo lo que puede llevar...

Buscaba alguna manera de poder marcar a un jsp en el head que se retrase su evaluación o algo por el estilo, que permita al resto de tags del jsp hacer sus cosas y en función de lo que hayan hecho éste escriba unos scripts u otros.

Comunicar jsp tags de arriba hacia abajo es trivial, lo que busco es poder comunicar en el sentido contrario.

Gracias de todas maneras por el aporte Ju4n4k4

Edit: Juas, mientras editabas estaba respondiendote jaja. Lo del tema de englobar todo en un tag y buscar el padre he estado mirandolo antes un poco por encima, pero para que cumpliese mi propósito debería estar todo lo contenido en el head y body dentro de un <tag> </tag>

De todas maneras, podría escribir de esta manera en la apertura del tag padre desde un hijo? Porque sino estoy en las mismas.

Elektr0_ddr

Al final lo he hecho con un tag con body, donde meto básicamente toda la página, y tras procesar el cuerpo, escribo en un punto del header todos los scripts que han ido marcando otros tags.

Algo así

<html>
   <tag:printScript>
      <head>
         <tag:printScript place="true"/>
      </head>
      <body>
         <tag:script nombre="jquery"/>
         <tag:script nombre="jquery-ui"/>
      <body>
   </tag:printScript>
</html>

Alguien sabe si el procesado del cuerpo de un tag, es más lento que si no hubiera un tag, es decir, por estar ahora mismo toda mi página como el bodyContent de un jsptag (imaginemos que no hace nada), va a realizarse el procesado del jsp más lento?

JuAn4k4

No creo, si al final un tag no es mas que un objeto de esa clase al a que se le llama varias veces. No tiene más

Si te fijas tu solución es casi la que he puesto en #2 al editar xD

Elektr0_ddr

Pues si, la solución es parecida a la que me diste, pero por el request me aseguro de que no se repite bajo ningún concepto, porque la plantilla jsp es un Tiles, con componentes freemarker, includes de JSPs, jsptags variopintos, un poco selvatico, y no se si funcionaría en todos los casos el ancetor, teniendo en cuenta que el ancestor no va a estar en el mismo jsp incluido, ni plantilla freemarker...

Bueno, la cosa es que va fetén, no se porque tenía la idea de que el cuerpo de un tag se procesaría diferente al resto de la página.

Gracias JuAn4k4

Usuarios habituales

  • Elektr0_ddr
  • JuAn4k4