Author Topic: otra duda con <jsp:include  (Read 17554 times)

Sarandonga

  • Newbie
  • *
  • Posts: 30
  • Karma: 0
    • View Profile
otra duda con <jsp:include
« on: Junio 19, 2007, 01:22:55 am »
Hola!

Ya pregunté otra vez sobre como anidar páginas jsp en otras jsp.
Lo conseguí con la sentencia <jsp:include page="pagina.jsp" flush="true" />

Pues bien:
El problema que se me plantea ahora es que sí en esa pagina.jsp llamo a clases para acceder a la base de datos, por ejemplo:

 <%!Divisas otra_divisa = new Divisa();%>

y tengo un select que relleno con los valores que me devuelva esa clase
la página no se me incluye.  No aparece nada. Lo he probado quitando las llamadas a las clases, y entonces si que se me ve el contenido de pagina.jsp pero sin mostrar los datos, ya que suprimi esa llamada a Divisa.

¿Por qué puede pasar esto?

Una ayudina pó favó ...   ???  :)

rfilgueiras

  • Jr. Member
  • **
  • Posts: 79
  • Karma: 0
    • View Profile
    • Blog de programación
Re: otra duda con <jsp:include
« Reply #1 on: Junio 19, 2007, 02:44:14 pm »
En principio creo que deberían verse los datos sin ningún problema, aún así estoy dándole vueltas para encontrar la razón por la cual tu diseño es este. Por lo que veo tienes un jsp y dentro del mismo tienes otro jsp, y este último accede directamente a la base de datos.

¿es así?

Sarandonga

  • Newbie
  • *
  • Posts: 30
  • Karma: 0
    • View Profile
Re: otra duda con <jsp:include
« Reply #2 on: Junio 19, 2007, 04:12:09 pm »
Hola!

Sí es así. Utilizo la pagina contenedora como plantilla para distribuir mejor la información y luego solo varío la página a incluir

Asi mismo tengo una pagina llamada cabecera.jsp desde la cual importo todas las clases que necesito y no da error, así que supongo que se incluyó bien; fotoencabezado.jsp que contiene una foto de encabezado y que incluyo en la plantilla, por así llamarla; también un menú vertical y  otro horizontal que incluyo de la misma manera y sin problema...

Pero al incluir la tabla con el meollo de la cuestión, es decir, la página donde trabajo con clases, nada, no se me muestra. Se me siguen mostrando la cabecera y los menús perfectamente pero no la página con la que trabajo con clases... Espero haberme explicado.

Adjunto los ficheros... por si me expliké mal
Un saludo y gracias!!

rfilgueiras

  • Jr. Member
  • **
  • Posts: 79
  • Karma: 0
    • View Profile
    • Blog de programación
Re: otra duda con <jsp:include
« Reply #3 on: Junio 19, 2007, 04:39:40 pm »
En principio no le veo nada extraño. Yo probaría si realmente el vector trae objetos o no los trae. De todas formas también utilizaría Iterator para recorrer el vector. Mira http://blog.riolambre.com/?p=61

Saludos

venkman

  • Jr. Member
  • **
  • Posts: 68
  • Karma: 0
    • View Profile
Re: otra duda con <jsp:include
« Reply #4 on: Junio 21, 2007, 04:28:31 pm »
Creo que el problema es que no tienes clara la diferencia entre la directiva include y la acción include.

1. La acción <jsp:include page="url" flush="true|false" />.

Esta acción lo que hace es incluir en tu página el resultado de llamar a "url".

Es decir, que se produce realmente una llamada independiente a "url" y lo que se obtenga como respuesta es lo que se incluye en la página. Con esta acción puedes incluir tanto URLs locales como URLs externas que no tengan nada que ver con tu aplicación. De cara a tu página, da igual dónde esté o qué sea lo que se está incluyendo. Podrías incluir el resultado de llamar a, por ejemplo, http://www.chuidiang.com/ e incluir eso dentro de tu página.


2. La directiva <%@ include file="url" %>.

La directiva include funciona de forma bastante diferente. Lo que hace es insertar el fichero "url" tal cual dentro de tu página jsp. Como si fuera parte de ella. Así, la "url" insertada tiene código Java o etiquetas JSP, se ejecutan como parte de tu página.


Para que quede más clara la diferencia, la directiva hace la inserción en el momento de traducir tu página a un servlet y compilarlo. A todos los efectos, el trozo incluido está dentro de tu página como cualquier otro trozo de la misma.
La acción, por el contrario, incluye "url" haciendo una nueva llamada en el momento en que se pide la página. Es decir, es totalmente externo a ella.


Por lo que he visto en proveedoresadmin.jsp estás usando <jsp:include page="[...]/proveedoresConsulta.jsp" y sin embargo, proveedoresConsulta.jsp intenta utilizar objetos definidos en proveedoresadmin.jsp. Eso, lógicamente no funciona.

Ahora bien... la solución no creo que sea simplemente usar la directiva en lugar de usar la acción. Creo que hay que ir un poco más allá. Si quien usa otra_divisa, nueva_divisa, otra_formapago, etc es siempre proveedoresConsulta.jsp, ¿no sería más lógico definirlas en esa misma página?
Las cosas quedan siempre más ordenadas y manejables si no haces depender a unas páginas de otras mientras no sea estrictamente necesario. Se trata de encapsular, de hacer que cada interés o aspecto sea autosuficiente e independiente del resto.

Imagina que más adelante quisieras incluir proveedoresConsulta.jsp dentro de otra página distinta. Tendrías que obligar a que esa página declare exactamente las mismas variables con los mismos nombres y tipos que lo hacía proveedoresadmin.jsp, lo que lleva a duplicar código. Eso nunca es bueno.

Y no sólo eso. Ahora mismo, si quieres cambiar un día el nombre de la variable nueva_divisa (por ejemplo), tienes que hacerlo en 2 ficheros distintos. Es mejor si sólo está en uno. Así no te pasa que lo cambias en uno y te olvidas en el otro o que si estás editando uno tienes que estar mirando el otro para saber cómo llamaste a la variable tal...

En fin, que yo optaría por meter esas variables donde realmente se usan, y dejar que las partes que son básicamente HTML y unos includes (es decir proveedoresadmin.jsp) no cree dependencias para las páginas incluidas.

Sarandonga

  • Newbie
  • *
  • Posts: 30
  • Karma: 0
    • View Profile
Re: otra duda con <jsp:include
« Reply #5 on: Junio 21, 2007, 04:41:26 pm »
Olé olé!
Además de que con esta explicación me perfectamente claro, funciona a las mil maravillas.
Muchas Gracias!!!

 

ey