2012-02-02 25 views
132

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

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

y

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

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

Por lo tanto, tengo que obtener el valor p y mostrar la página en función de ello.

Lo que he hecho hasta ahora es lo siguiente.

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

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

<% 
} 
%> 

Entonces, ¿cómo puedo realizar 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, podemos usar include() o include_once(). Estoy un poco atrapado en esta JSP. :(

+1

¿Por qué no codificar el nombre de página allí? de todos modos, estás buscando P, entonces sabes que la página de destinación será p.jsp, ¿hay alguna razón para complicarte? – kosa

+0

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., está separado en páginas secundarias. Entonces, codificar cada línea seria desagradable. Digamos, 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 ciclo es mejor. ¿No es así? Creo que esta podría ser la solución: http://stackoverflow.com/questions/482788/how-to-include-a-runtime-file-for-include-in-jsp –

Respuesta

194

Lo que está haciendo es una estática incluyen. 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 el momento de la ejecución.

Lo que necesita es una dinámica incluyen:

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

en cuenta que debe utilizar la JSP EL lugar de scriptles. También parece que está implementando un controlador central con index.jsp. Debería usar un servlet para hacer eso en su lugar, y enviarlo al JSP apropiado desde este servlet. O mejor, utilice un marco MVC existente como Stripes o Spring MVC.

+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/<% = p% > .jsp'. ¡Parece que se usa '<%= p %>' como está en la ruta del archivo! –

+7

No use scriptlets. Use JSP EL: page = "/ includes/$ {param.p}". O intente con page = "<% ="/includes/"+ p%>". –

+3

Gracias. Lo usé así: ' "/>' y está funcionando ahora :) –

4

1. <a href="index.jsp?p=products">Products</a> cuando el usuario hace clic en el enlace de los productos, que se pueden llamar directamente products.jsp.

me refiero u puede mantener el nombre del archivo JSP mismo que el parámetro de 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.you puede mantener archivo de recursos externo con llave, pares de valores. , como a continuación

products : products.jsp

customer : customers.jsp

puede recuperar mediante programación el nombre de archivo JSP de archivo Properies.

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

+0

Gracias. Estoy usando lo primero en este momento. En realidad, estoy teniendo problemas con cómo hacer esto! –

+0

He editado la respuesta –

+0

'org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: Archivo"/<%=p%> "no encontrado'. ¿Eso funcionó de tu lado? –

13

Puede utilizar Incluir Directivas

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

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

<% 
} 
%> 

o JSP incluir la acción

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

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

<% 
} 
%> 

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

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

ejemplo:

www.yourwebsite.com/products 

en lugar de

www.yourwebsite.com/?p=products 

Ver este vídeo Spring MVC Framework

+1

el video está protegido. Por favor compártelo en público – AutoMEta

+0

¿Puedes verificar si tu primer ejemplo realmente funciona? Parece que no puedo hacer que funcione. – Jus12

5

A la hora de página de traducción, el contenido del archivo dado en la directiva include se 'pega' como es decir, en el lugar donde se usa la directiva de inclusión JSP. Luego, la página fuente JSP se convierte en una clase de servlet java. El archivo incluido puede ser un recurso estático o una página JSP. Generalmente, la directiva de inclusión JSP se usa para incluir encabezados y pie de página.

Sintaxis para incluir un archivo JSP:

<%@ include file="relative url"> 

Ejemplo

<%@include file="page_name.jsp" %> 
13

Puede utilizar parámetros como la

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

y

en about.jsp que pueda tomar el paramt er

<%String leftAds = request.getParameter("articleId");%> 
Cuestiones relacionadas