parameter page java jsp include parameter-passing param

page - jsp: param con clase Java



jsp param (3)

Cuando pasa la variable ${widget} se traduce al momento de la solicitud a una cadena ( widget.toString() ). Este valor luego se pasa al segundo JSP como una cadena, no como el objeto original de Java.

Un enfoque para acceder a los valores del objeto es establecer el valor del parámetro con el valor del atributo:

<jsp:param name="widgetId" value="${widget.id}"/>

Luego use el código de abajo en la segunda JSP:

${param.widgetId}

También puede establecer el widget como un atributo de solicitud y usarlo en la segunda página como ${widget.id} o $ {request.widget.id}. Sugiero que uses el segundo enfoque.

Tengo un archivo JSP que incluye otro archivo JSP. El primer JSP debe pasar una instancia de una clase Java (widget) al segundo archivo JSP.

Esto es lo que tengo:

El primer JSP:

<jsp:include page="/container/SpecialWidget.jsp"> <jsp:param name="widget" value="${widget}"/> // widget is a .Java POJO </jsp:include>

El segundo JSP:

${param.widget.id}

El problema es que este código da un error (dice que no conoce el ID). Si omito la parte ".id", la página imprime el código Java para la clase Java, lo que significa que la clase se ha transferido correctamente. Si cambio la regla $ {widget} de la primera página en, por ejemplo, $ {widget.id} y trato de imprimir $ {param.widget}, todo funciona bien.

Mi pregunta: ¿Por qué no puedo pasar una clase de Java y llamar directamente a sus atributos? ¿Qué estoy haciendo mal?

Editar: mensaje de error: Causado por: javax.el.PropertyNotFoundException: Propiedad ''id'' no encontrada en el tipo java.lang.String


Logré solucionar mi problema con el siguiente código:

<c:set var="widget" value="${widget}" scope="request" /> <jsp:include page="/SOMEWHERE/SpecialWidget.jsp"/>

Gracias a los dos por su ayuda :) Me salvó el día


<jsp:param> pasa el parámetro como un parámetro de solicitud HTTP, que solo puede ser una Cadena. Entonces se llama a toString() en su widget, y el resultado de este método se pasa como parámetro.

Debería usar una etiqueta JSP, implementada como un archivo de etiqueta, en lugar de usar una inclusión JSP. Consulte http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html para saber cómo definir un uso.

Por ejemplo:

Definición de etiqueta, en /WEB-INF/tags/specialWidget.tag:

<%@ tag %> <%@ attribute name="widget" required="true" type="the.fully.qualified.name.of.WidgetClass" %> TODO: add the HTML markup that must be displayed, using ${widget} to access the passed in widget attribute

Uso de etiquetas en cualquier JSP:

<%@ taglib prefix="myTags" tagdir="/WEB-INF/tags" %> ... Tada! I will use the specialWidget tag here, with widget as an attribute: <myTags:specialWidget widget="${widget}"/>