una servlet recibir parametros getparameter enviar ejemplos datos clase java jsp jstl el

java - servlet - Cómo pasar el parámetro a jsp: incluir a través de c: establecer? ¿Cuáles son los alcances de las variables en JSP?



request.setattribute jsp (3)

Debe establecer que la variable sea (al menos) request ámbito. Puede hacer la identificación de la siguiente manera:

<c:set var="pgTitle" value="Welcome" scope="request"/> <jsp:include page="/jsp/inc/head.jsp" />

Y luego, en head.jsp , puede generar la variable de esta manera:

<c:out value="${requestScope.pgTitle}" />

Tengo esto en welcome.jsp

<c:set var="pgTitle" value="Welcome"/> <jsp:include page="/jsp/inc/head.jsp" />

Y esto en head.jsp:

<title>Site Name - ${pgTitle}</title>

Pero la variable está en blanco, y la salida es meramente

Site Name -

He leído muchos artículos y no puedo entender cuál es el problema. Si me hago eco de ${pgTitle} otro lugar dentro del mismo welcome.jsp, entonces ${pgTitle} bien.

Incluyo la biblioteca de etiquetas núcleo en ambas páginas.


Esto se debe a que la variable pgTitle se establece en el alcance de la página. Verifíquelo here (lo siento, no puedo obtener una documentación oficial para esto).

Si desea que esto funcione, debe establecer la variable en el ámbito de solicitud al menos. Para establecer su variable en el alcance de la solicitud, use el atributo de scope en <c:set> :

<c:set var="pgTitle" value="Welcome" scope="request" />

Según su comentario, en el desarrollo web, el alcance de las variables es importante porque define dónde se puede usar la variable (similar a una variable declarada como campo en una clase y una variable declarada localmente en un método). Hay cuatro ámbitos en JSP conocidos como contexto:

  • Alcance de página (manejado por PageContext ). Las variables solo se pueden alcanzar si se establecen como atributos en la página actual. Esto significa que solo la página actual puede acceder a estos atributos, las páginas incluidas son páginas diferentes, por lo que no pueden acceder a estos atributos.
  • Alcance de la solicitud (manejado por ServletRequest ). Las variables solo se pueden alcanzar si se establecen como atributos en la solicitud actual. Esto significa que cada página manejada en la misma solicitud puede acceder a estos atributos. Nota importante : una redirección implica un nuevo proceso de solicitud / respuesta. Esto significa que si establece atributos en la solicitud y ejecuta una redirección, estos atributos no se establecerán como atributos en la nueva solicitud.
  • Alcance de sesión (manejado por HttpSession ). Las variables solo se pueden alcanzar si se establecen como atributos en la sesión de usuario actual. Esto significa que cada página utilizada en la misma sesión de usuario puede usar estos atributos hasta que se eliminen o la sesión expire.
  • Ámbito de aplicación (manejado por ServletContext ). Las variables solo se pueden alcanzar si se establecen como atributos en el contexto actual. Esto significa que cada página de cada atributo de sesión puede acceder a estas variables hasta que se eliminen de SessionContext o la aplicación web no se despliegue.

Más información:

¿Es esta la manera correcta de lograr lo que estoy tratando de hacer?

Si hay un servlet u otro controlador que maneja los atributos que se establecerán en la solicitud (por ejemplo, @Controller de Spring MVC o Bean administrado por JSF), establezca el atributo allí y no en su página directamente.

Personalmente, toma tiempo ganar experiencia y definir el mejor alcance de las variables cuando se usan en aplicaciones web. Ejemplos básicos:

  • La división de una String por comas para fines de presentación solo afectará a la vista actual, por lo que se puede establecer en el alcance de la página.
  • El error y los mensajes exitosos son los más adecuados en el alcance de la solicitud. Si el usuario actualiza la página, es probable que no vea los mismos mensajes a menos que los datos se vuelvan a procesar.
  • La información de usuario como nombre, apodo y preferencias se puede configurar en el alcance de la sesión.
  • Si tiene que mostrar una lista de países (que no debería cambiar en pocos días), puede almacenar esta lista en el alcance de la aplicación.

Una forma es pasar variables a una inclusión a través de parámetros de consulta:

<jsp:include page="/WEB-INF/views/partial.jsp?foo=${bar}" /> <jsp:include page="/WEB-INF/views/partial.jsp"> <jsp:param name="foo" value="${bar}" /> <jsp:param name="foo2" value="${bar2}" /> </jsp:include>

A continuación, puede acceder a esos parámetros con ${param.foo}

Otra sería usar etiquetas personalizadas:

/WEB-INF/tags/head.tag

<%@ attribute name="title" %> <head> <title>${title}</title> </head>

somePage.jsp

<%@ taglib prefix="layout" tagdir="/WEB-INF/tags" %> <html> <layout:head title="myRadTitle" /> <body></body> <html/>