Java - Problemas con includes jsp

 
Vista:

Problemas con includes jsp

Publicado por Mariah (11 intervenciones) el 29/01/2007 18:33:36
Hola, estoy haciendo un include de jsp pero la url contiene varios parámetros, puesto que para la inclusión de dicha jsp necesito pasarle los parámetros que estoy utilizando con la tag <jsp:param y dado que la URL que recibo no tiene siempre los mismos parámetros me dí a la tarea de hacer un pequeño scriptlet que separara los parámetros de la url relativa y los almacenara en un arreglo bidimensional. Posterior a esto armo una cadena con todo lo necesario tanto el <jsp:include como los <jsp:param y lo escribo con un document.write......

La jsp no lo interpretaba por lo que pensé que era por tiempo de ejecución y posteriormente lo hice un paso antes para que se pusiera esa cadena en un request.setAttribute y nada más jalarlo de la otra jsp y escribirlo, pero tampoco se pudo.

Finalmente, coloqué el arreglo en igual en el request como un atributo y lo recorrí en la otra jsp pero tampoco funcionó.

Cabe destacar que si copio y pego el código que genero de manera estática en la jsp si funciona.....

Ojala alguien pueda ayudarme.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con includes jsp

Publicado por neossoftware (622 intervenciones) el 29/01/2007 19:48:30
Por lo que veo
cita "Cabe destacar que si copio y pego el código que genero de manera estática en la jsp si funciona..... "

Esta JSP include es candidata a una Custom Tag, si deseas saber como crear una checate esto:

http://www.programacion.com/asp/articulo/customtags/

Saludos Comunidad Open Source
Neos Software Inc 2007
http://www.geocities.com/neos_software/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mariah (11 intervenciones) el 29/01/2007 20:09:25
mhh gracias por tu respuesta mario por lo que veo los dos somos de méxico... pero de qué me serviria crear una tag para escribir otra tag? sé crear taglibs pero pues eso en qué me ayudaría?

Muchas gracias....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Gonzalo (180 intervenciones) el 29/01/2007 20:48:20
>Posterior a esto armo una cadena con todo lo necesario tanto el <jsp:include como los
><jsp:param y lo escribo con un document.write......

Espera... ¿Escribes el <jsp:include ... > desde Javascript??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mariah (11 intervenciones) el 29/01/2007 20:55:20
sip, originalmente así lo estaba haciendo pero después lo hice con <%= y tampoco me funcionó de qué manera podría hacerlo? porque aún recorriendo el arreglo en otra jsp es decir pongo el arreglo en el request y lo obtengo en otra jsp y ahi le doy un for para recorrerlo y le pongo estáticamente <jsp:param name="<%=algo%>" value="<%=algo%>"/> e igual para la ruta relativa... y nada

cuando le doy ver código fuente, efectivamente está escrito pero no le hace caso... :( y como dije si le doy copy paste... si funciona estáticamente.

Gracias por tu atención Gonzalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mario (622 intervenciones) el 29/01/2007 21:04:06
cita "cuando le doy ver código fuente, efectivamente está escrito pero no le hace caso.."

entoncs como como si esta el resultado en el codigo de la pagina como que no lo pinta eso como que esta raro no crees?

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mariah (11 intervenciones) el 29/01/2007 21:06:39
Si !!! Tienes razón Mario yo también pienso que está rarísimo.... ya me cansé de darle vueltas al asunto... no sé si tenga que echarme de plano un clavadazo al uso de <%= o qué onda porque si... te prometo que al ver el código fuente ahí está !!! y no le hace caso y si lo corto y lo pego ... funciona :S así que no tengo la más mínima idea de qué sucede... :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mario (622 intervenciones) el 30/01/2007 00:47:02
Haber pon el codigo JSP de ambas paginas.

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mariah (11 intervenciones) el 30/01/2007 00:55:39
ESTE ES EL CÓDIGO QUE VA EN LA JSP QUE SEPARA LOS PARÁMETROS EN UN ARREGLO:

String ruta1 = request.getParameter("ruta");
//Variables para obtener las variables existen en mi cadena
int index;
int fromIndex=0;
int count = 1;
//Creo arreglo para Recorrer
String[][] a;
String variable = null;
String valorVariable = null;
String var = null;
String valor = null;
int igual = 0;
int ampersan = 0;
//Variables para la obtención la posición de donde comienza el primer parámetro
int posicion = 0;
int temp = 0;
int temp2 = 0;
int tmp3 = 0;
//ruta1 relativa que se escribe en el include
String relativa = null;
//Pregunto si la cadena no viene vacía
if((ruta1.length()>0)&&(ruta1!=null)){
posicion = ruta1.toString().indexOf("?");
relativa = ruta1.toString().substring(0,posicion);
System.out.println("ruta1 Relativa : " + relativa);
//Quito la ruta1 relativa y me quedo únicamente con la cadena de parámetros
ruta1 = ruta1.substring(posicion + 1);
System.out.println("ruta1 Parametros: " + ruta1);
while ( (index = ruta1.indexOf('&', fromIndex)) > -1) {
count++;
fromIndex = index + 1;
}
cadena = "<jsp:include page=\""+relativa+"\" flush=\"true\">";
//reviso que vengan por lo menos dos parámetros
if(count!=1){
a = new String[count][2];
for ( int i = 0 ; i < a.length ; i++ ) {
for (int j = 0; j < a[i].length; j++){
if((i==0)&&(j==0)){
//Saco la posición del primer signo de = para sacar el primer nombre del parámetro
temp = ruta1.toString().indexOf("=");
// Saco el primer nombre del parámetro
var = ruta1.toString().substring(0, temp);
a[i][j] = var;
System.out.println(i + " - " + j + " : " + a[i][j]);
}else{
if((i==0)&&(j==1)){
// Saco la posición del primer ampersan para sacar el valor de la variable
temp2 = ruta1.toString().indexOf("&");
// Saco el valor de la variable.
valor = ruta1.toString().substring(temp + 1, temp2);
a[i][j] = valor;
System.out.println(i + " - " + j + " : " + a[i][j]);
//La ruta1 sin los primeros parámetros
tmp3 = ruta1.toString().indexOf("&");
//Reescribo nombre de la ruta1
ruta1 = ruta1.toString().substring(tmp3+1) + "&";
cadena = cadena + "<jsp:param name=\""+var+"\" value=\""+valor+"\"/>";
System.out.println("\n\naqui1: " + var + " : " + valor);
}else{
if(j==0){
//Saco posición del =
igual = ruta1.toString().indexOf("=");
//Saco nombre de la variable
variable = ruta1.toString().substring(0,igual);
a[i][j] = variable;
System.out.println(i + " - " + j + " : " + a[i][j]);
//Reescribo nombre de la ruta1
ruta1= ruta1.toString().substring(igual+1);
}else{
//Saco posición ampersan
ampersan = ruta1.toString().indexOf("&");
//Saco valor de la variable lo que está entre el = y el &
valorVariable = ruta1.toString().substring(0,ampersan);
a[i][j] = valorVariable;
System.out.println(i + " - " + j + " : " + a[i][j]);
//Reescribo nombre de la ruta1
ruta1= ruta1.toString().substring(ampersan+1);
cadena = cadena + "<jsp:param name=\""+variable+"\" value=\""+valorVariable+"\"/>";
System.out.println("\n\naqui3: " + variable + " : " + valorVariable);
}
}
}
}
}
cadena = cadena + "</jsp:include>";
cadena.trim();
System.out.println(" | "+cadena+" | ");
request.setAttribute("cadena",cadena);
request.setAttribute("arreglo", a);
request.setAttribute("relativa", relativa);
System.out.println("\n**********************************************************");
}else{
//Entro a este else cuando trae un sólo parámetro.
System.out.println("avver dkaskdjl");
String[][] b= new String[1][2];
int tempo = ruta1.toString().indexOf("=");
String var2 = ruta1.toString().substring(0,tempo);
b[0][0]= var2;
ruta1 = ruta1.toString().substring(tempo+1);
b[0][1]= ruta1;
cadena = "<jsp:include page=\""+relativa+"\" flush=\"true\">";
cadena = cadena + "<jsp:param name=\""+var2+"\" value=\""+ruta1+"\"/>";
cadena = cadena + "</jsp:include>";
cadena.trim();
request.setAttribute("cadena",cadena);
}
}//cierre del if del count
else{
//Aquí entro cuando la ruta1 viene en nulo ó en vacío.
cadena = "<div class='Titulos'>Ha ocurrido un error por favor comuníquese a soporte técnico.</div>";
cadena.trim();
request.setAttribute("cadena",cadena);
System.out.println("Cadema ELSE : " + cadena);
}

Cómo podrás darte cuenta lo hago de dos maneras. 1.- poniendo la cadena que arme en el request y la otra poniendo el arreglo pero de ninguna de las dos formas funciona.

Y ESTO ES LO QUE ESTÁ EN LA JSP QUE LO OBTIENE:

<%
System.out.println(request.getParameter("ruta"));

String c[][];
c = (String[][])request.getAttribute("arreglo");

int veces = 0;
String variable = null;
String valor = null;

request.getAttribute("arreglo");

%>
<jsp:include page="<%=request.getAttribute("relativa")%>" flush="true"/>
<%
for ( int i = 0 ; i < c.length ; i++ ) {
for (int j = 0; j < c[i].length; j++){
System.out.println("arreglo : " + c[i][j]);
if(j==0){
variable = c[i][j];
System.out.println("Variable: " + c[i][j]);
}else{
valor = c[i][j];
System.out.println("Valor: " + c[i][j]);
}
}//cierre segundo for %>
<jsp:param name="<%=variable%>" value="<%=valor%>"/>
<%
}//cierre primer for
%>
</jsp:include>

ESPERO NO ESTÉ MUY ENREDADO... MUCHAS GRACIAS MARIO.

SALUDOS,

PD. OJALA PUEDAS PASARME TU CORREO DE HOTMAIL PARA AGREGARTE SI NO TE MOLESTA.

GRACIAS :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Gonzalo (180 intervenciones) el 30/01/2007 09:27:31
Hola.

Vamos por partes.

Lo primero es que eso de escribir tags <jsp:include> dinámicamente, simplemente no se puede hacer. Así que en cuanto a la idea de construirte una cadena con todos los tags... olvídalo. No se puede porque las cosas no funcionan así.

El funcionamiento (aproximado) es:
JSP ----(se transforma)---> Java ---(se ejecuta)---> HTML

El problema es que una vez que el JSP se ha transformado en Java para ejecutarse, todo lo que tú hagas de intentar escribir más código JSP no sirve para nada porque ese ya no se transforma en código Java. Se queda ahí sin transformarse, que es por lo que lo ves en el código de la página.

Ahora, el segundo problema está en que dentro del tag <jsp:include> sólo se pueden poner tags <jsp:param>. Es decir, no se puede poner código Java, ni se puede poner HTML ni nada. Sólo puede ser:

<jsp:include page="<%=request.getAttribute("relativa")%>" flush="true"/>
<jsp:param name="parametro1" value="<%=valor%>"/>
<jsp:param name="parametro2" value="<%=otrovalor%>"/>
</jsp:include>

Pero no puede ir dentro de eso nada más.
Fíjate que tampoco en el atributo name de <jsp:param> puedes poner cosas dinámicas. En el value sí, pero no en el name.


Tampoco sé si el código que pones para trocear la ruta funcionará demasiado bien en algunos casos, pero más que esto, me pregunto una cosa... ¿Para qué quieres hacer todo esto? Quiero decir... Enviarle la ruta como parámetro en una petición, no es buena idea. No digo que no se pueda hacer, pero no es buena idea.

Es algo que por un lado te puede dar problemas de seguridad y por otro hace que tu aplicación web sea mucho más compleja de modificar.

Por eso, te pregunto ¿exactamente qué es lo que quieres hacer? Y no me refiero a técnicamente sino a la descripción general de lo que intentas conseguir con esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mariah (11 intervenciones) el 30/01/2007 16:45:45
Antes que nada muchísimas gracias por tu atención Gonzalo me has sacado de muchas dudas.

ok..

Mira el problema inicial es que la infraestructura con la que esta montado una parte del portal está armado con TILES de java y en algunas ocasiones con IFRAMES. Se arma con tiles cuando la ruta termina en jsp y se arma con IFRAMES cuando la ruta es un servlet. Esto es por problema de que los TILES tienen sus propias tags para pasar parámetros y si es un servlet no funciona, cosa que igual para con los includes de jsp´s.

Me han pedido que implemente las famosas ventanas que bloquean el resto de la página con un layer (muy al estilo de AJAX) pero sin serlo.

Lo primero con lo que me topé es que obviamente cuando es un iframe el layer que debería de cubrir toda la página solamente carga en la parte del iframe.

Lo segundo es que el iframe en algunas ocasiones (dependiendo de la conexión que el usuario tenga) no actualiza adecuadamente datos que vienen de la sesión cosa que solucioné con un setTimeout para hacerle una pequeña pausa y logre actualizarse.

Es por eso que decidí que era mejor eliminar esos iframes y me tomé a la tarea de hacer lo que ya he comentado.

He tratado de encontrar alguna alternativa sin éxito sólo lo que he hecho hasta ahora que ha resultado inútil.

Ojala sepas de algo para poder solucionar mi problema.

Muchísisimas gracias por tu atención.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Gonzalo (180 intervenciones) el 30/01/2007 20:37:03
Bueno, Mariah, debo decir que a pesar de tu buena explicación, hay algún detalle que aún no me queda claro del todo.

Lo más importante es: Lo que quieres cambiar... ¿es sólo de la parte del cliente (navegador) o cambia en algo la forma de funcionar del servidor (servlets, tiles, jsp...)? Quiero decir, ¿se trata sólo de añadir un layer que cubra toda la centana bloqueando y luego desbloqueando o estáis cambiando lo de Tiles y por eso se añade el layer?

Lo pregunto porque si el motivo de cambiar es sólo por poner el layer que bloquea, esto se puede hacer sin tener que cambiar más cosas. Y por otro lado si el cambio es más amplio, quizá merece la pena reestructurar todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Mariah (11 intervenciones) el 30/01/2007 20:53:44
Hola Gonzalo una vez más gracias por tu fina atención.

En parte si es por la parte del layer y por otra parte lo de la actualización de datos en sesión. En caso de querer darle una reestructuración a todo eso... qué me recomendarías utilizar? o cuál te parece que es la mejor alternativa.

Gracias y saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con includes jsp

Publicado por Gonzalo (180 intervenciones) el 30/01/2007 23:49:45
Lo de reestructurar lo digo más que nada por elegir una sola forma de hacer las cosas.

Se trata de no tener parte hecho de un modo y otra parte de otro, sino que sea todo uniforme. Cuál forma elegir es casi lo menos importante, siempre que sea una para toda la aplicación.

Lo que sí haría sin duda es quitar todos los iframe. Eso seguro. El resto ya depende del tipo de aplicación, del tiempo que tengas y esas cosas. Puedes pasarlo todo a Tiles. O convertirlo todo a JSF (que también es basado en componentes así que se parece algo a Tiles). Si estás usando Tiles sobre Struts a lo mejor puede que no necesites Tiles y simplemente puedas usar Struts a secas (y si quieres "efectos tipo Ajax" puedes usar DWR - http://getahead.ltd.uk/dwr - que se integra bien con Struts).

Depende un poco de las necesidades de la aplicación y de lo que puedas/quieras cambiar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar