2009-10-08 25 views
13

Quería pasar un objeto de tipo List que está en el JPS principal a un JSP incluido (jsp: include). Como el parm solo admite cadenas, no puedo usar la etiqueta parm para pasar los datos del tipo de lista al archivo de inclusión.Pasar una lista a otro archivo jsp

utiliza ejemplos:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${applications}"/> 
</jsp:include> 

O:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${confirmed_applications}"/> 
</jsp:include> 
<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${unconfirmed_applications}"/> 
</jsp:include> 
<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${canceled_applications}"/> 
</jsp:include> 

que podría crear una etiqueta de controlador simple, pero me gustaría saber si hay una manera más fácil.

Respuesta

7

Esto es de hecho para lo que están diseñadas las etiquetas jsp. Crea un archivo .tag que acepta los atributos (no parámetros), que pueden ser de tipo arbitrario.

Consulte this article para obtener un buen tutorial.

"Params" son análogos a los parámetros que se ven en una consulta HTTP (la parte de la URL que sigue al '?').

+0

No sabía que se podían crear taglibs en JSP puro. ¡Gran hombre! ¡Gracias! –

+0

Sí, esto funciona genial. Nota pequeña: la parte importante es establecer el ** tipo ** del atributo como Objeto; de lo contrario, se tratará como Cadena. '<% @ attribute name =" answers "required =" true "type =" java.lang.Object "%>' –

3

¿Cómo está obteniendo esa lista en su JSP principal?

Si usted está recibiendo desde el modelo (solicitud directa/indirecta/atributo de sesión) que puede pasar el nombre del atributo a su JSP incluido y volver a obtenerla de modelo hay:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="confirmedApplications"/> 
</jsp:include> 

Si está generando o modificando esa lista en el propio JSP, realmente tiene problemas mayores que este :-) pero puede vincular su lista para solicitarla bajo algún nombre de atributo y luego usar el enfoque anterior.

0

O bien puede utilizar objetos de solicitud o de sesión para transferir objetos.

Advantage

Solicitud - solicitud de uso conforme su duración es menor en comparación con un objeto de sesión.

Sesión - Puede recuperar el mismo objeto en algún momento posterior en otra página o acción

2

Suponiendo que se pone la lista en la solicitud de alcance y utilizando applications como el nombre de su parámetro se puede hacer referencia a la lista como esta ${requestScope[param.applications]}

10

De acuerdo con ChssPly76 que es probablemente un signo de problemas si la Lista se genera en el JSP, pero otro enfoque alternativo para obtener el otro JSP es agregarlo al campo de atributo de objetos HttpServletRequest utilizando un scriplet:

JSP con t Lista él:

<% 
request.setAttribute("theList", ListObject); 
%> 

El otro JSP:

<% 
List myList = (List) request.getAttribute("theList"); 
%> 
2

Usted podría pasar el objeto a través de la Lista requestScope:

<c:set var="listApplications" value="${applications}" scope="request"/> 
<jsp:include page="/jsp/appList.jsp" /> 

Y en applist.jsp puede recuperar la lista usando

${requestScope.listApplications} 
0

Supongamos que tiene parent.jsp y child.jsp.

desea:

1) Incluir child.jsp de parent.jsp, 2) Enviar algunos parámetros de parent.jsp a la child.jsp.

seguir los siguientes pasos:

1) En parent.jsp `

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<c:set var="items" value="${itemsFromDB}" scope="request"/> 
<jsp:include page="child.jsp"/> 

` 2) En child.jsp

<div> 
alert("${requestScope.items}"); 
</div> 

Eso es todo.

Cuestiones relacionadas