Incluir otro archivo JSP

161

Actualmente estoy tratando de aprender JSP. Mi pregunta es, en este momento solía incluir el encabezado y pie de página de la página usando:

<%@include file="includes/header.jsp" %>

y

<%@include file="includes/footer.jsp" %>

Pero ahora, también he separado el contenido de la página. Por lo tanto, si el usuario hace clic en una página, dicen productos, tiene que cargar el archivo JSP que se encuentra en: includes/pages/products.jsp Por lo tanto, el vínculo con el usuario es como: <a href="index.jsp?p=products">Products</a>.

Entonces, tengo que obtener el valor p y mostrar la página basada en él.

Lo siguiente es lo que he hecho hasta ahora.

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="includes/page_name.jsp" %>

<% 
 }
%>

Entonces, ¿cómo coloco el valor de la variable "p" en la posición de "page_name"?

O, ¿hay algún otro método que pueda usar?

En PHP, podríamos usar el include()o include_once(). Estoy un poco atrapado en este JSP. :(

Akhilesh B Chandran
fuente
1
¿Por qué no codificar el nombre de la página allí? de todos modos está buscando P, entonces sabe que la página de distinción será p.jsp, ¿hay alguna razón para complicarse?
kosa
Gracias por responder. Fue por un ejemplo. En realidad, he subdividido la página en varias. Por ejemplo, si tengo una página de Productos en el área de administración, para agregar un nuevo producto, editar un producto, buscar un producto, ver un producto, etc., se separa en subpáginas. Por lo tanto, codificar cada línea parecería desagradable. Digamos que para mostrar mi nombre solo 10 veces, podría elegir imprimir usando un bucle o escribir las 10 líneas. Pero creo que elegir el bucle es mejor. ¿No es así? Creo que esta podría ser la solución: stackoverflow.com/questions/482788/…
Akhilesh B Chandran

Respuestas:

231

Lo que estás haciendo es una inclusión estática. Una inclusión estática se resuelve en tiempo de compilación y, por lo tanto, no puede usar un valor de parámetro, que solo se conoce en tiempo de ejecución.

Lo que necesita es una dinámica que incluya:

<jsp:include page="..." />

Tenga en cuenta que debe usar JSP EL en lugar de scriptlets. También parece que está implementando un controlador central con index.jsp. En su lugar, debe usar un servlet para hacerlo y enviarlo al JSP apropiado desde este servlet. O mejor, use un marco MVC existente como Stripes o Spring MVC.

JB Nizet
fuente
1
Gracias por sus sugerencias :) He intentado usar jsp: include tag. Pero en tiempo de ejecución, da un error de archivo no encontrado. Detalles de la excepción: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. ¡Parece que <%= p %>se usa como está en la ruta del archivo!
Akhilesh B Chandran
77
No uses scriptlets. Utilice JSP EL: página = "/ incluye / $ {param.p}". O intente con page = "<% =" / includes / "+ p%>".
JB Nizet
3
Gracias. Lo usé así: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />y está funcionando ahora :)
Akhilesh B Chandran
2
Muy buena respuesta! He visto este patrón (controlador central en index.jsp) demasiadas veces y siempre genera problemas.
Matthias Hryniszak
¿No debería ser ese tiempo de traducción? ¿Y creo que aún puedes usar parámetros con eso?
Koray Tugay
26

Puedes usar parámetros como ese

<jsp:include page='about.jsp'>
    <jsp:param name="articleId" value=""/>
</jsp:include>

y

en about.jsp puedes tomar el parámetro

<%String leftAds = request.getParameter("articleId");%>
vitralyoz
fuente
18

Puede usar las directivas de inclusión

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="<%="includes/" + p +".jsp"%>"%>

<% 
 }
%>

o JSP incluye acción

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<jsp:include page="<%="includes/"+p+".jsp"%>"/>

<% 
 }
%>

La diferente directiva include incluye un archivo durante la fase de traducción. mientras JSP Incluir acción incluye un archivo en el momento en que se solicita la página

Recomiendo Spring MVC Framework como su controlador para manipular cosas. use el patrón de URL en lugar del parámetro.

ejemplo:

www.yourwebsite.com/products

en vez de

www.yourwebsite.com/?p=products

Mire este video Spring MVC Framework

Jaymelson Galang
fuente
1
el video está protegido ... compártelo al público
AutoMEta
¿Puedes verificar si tu primer ejemplo realmente funciona? Parece que no puedo hacer que funcione.
Jus12
8

En el momento de la traducción de la página, el contenido del archivo que figura en la directiva de inclusión se "pega" tal como está, en el lugar donde se utiliza la directiva de inclusión JSP. Luego, la página JSP de origen se convierte en una clase de servlet java. El archivo incluido puede ser un recurso estático o una página JSP. En general, la directiva JSP include se usa para incluir encabezados y pies de página.

Sintaxis para incluir un archivo jsp:

<%@ include file="relative url">

Ejemplo

<%@include file="page_name.jsp" %>
Aravind Cheekkallur
fuente
6

1. <a href="index.jsp?p=products">Products</a>cuando el usuario hace clic en el enlace Productos, puede llamar directamente a products.jsp.

Quiero decir que puedes mantener el nombre del archivo JSP igual que el parámetro Valor.

<%
 if(request.getParameter("p")!=null)
 { 
   String contextPath="includes/";
   String p = request.getParameter("p");
   p=p+".jsp";
   p=contextPath+p;

%>    

<%@include file="<%=p%>" %>

<% 
 }
%>

o

2.Puede mantener un archivo de recursos externo con clave, pares de valores. como abajo

products : products.jsp

customer : customers.jsp

puede recuperar programáticamente el nombre del archivo JSP del archivo de propiedades.

de esta manera puede cambiar fácilmente el nombre del archivo JSP

Balaswamy Vaddeman
fuente
Gracias. Estoy usando lo primero en este momento. En realidad, estoy teniendo problemas con cómo hacer esto.
Akhilesh B Chandran
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. ¿Eso funcionó a tu lado?
Akhilesh B Chandran
esto es cheque tema relacionado ruta si existe el archivo en ur camino, supongo ur ruta de contexto que falta (debe ser includes / admin.jsp) .I no han simulado Entre scenerio mi lado
Balaswamy Vaddeman
1
He intentado hacer eco del valor de "p". Que es: includes/add.jsp. Entonces se usa esta en incluir derivado: <%@ include file="includes/add.jsp" %>. Muestra el contenido de la página. Pero si uso esta línea en su lugar: ¡ <%@ include file="<%=p%>" %>muestra una excepción!
Akhilesh B Chandran
Hola tengo el mismo problema Obteniendo error File "<%=p%>" not found. Si voy a utilizar el valor real, está funcionando.
Reddy SK
0

Por una razón que aún no entiendo, después de usar <%@include file="includes/footer.jsp" %>en mi index.jspentonces en los otros archivos jsp como register.jsptuve que usar <%@ include file="footer.jsp"%>. Como puede ver, ya no era necesario usar la ruta completa, STS había almacenado mi ruta inicial.

Lekakos Theodore
fuente