Incluyendo la página JSP en otra página JSP, cómo evitar múltiples secciones de la cabeza / cuerpo?

StackOverflow https://stackoverflow.com/questions/1841274

  •  12-09-2019
  •  | 
  •  

Pregunta

Me gustaría incluir una página JSP en otra página JSP. Digamos que tengo master.jsp que está incluyendo slave.jsp.

Como slave.jsp tiene su propia sección <head> para tratar con JavaScript y CSS, hay una manera o tal vez otro método para fusionar el masterand slave CABEZA s en una sola? También lo mismo debería hacer para el CUERPO s.

He estado usando SiteMesh hace poco, pero creo que es bastante práctico para configurar una plantilla para cada página.

¿Fue útil?

Solución

Me fui para esta solución pasando un parámetro cuando se incluye la página.

master.jsp

<head>
  blablabla
  <c:import url="slave.jsp">
    <c:param name="sectionName" value="HEAD" />
  </c:import>
</head>
<body>
  blablabla
  <c:import url="slave.jsp">
  </c:import>
</body>

y después en slave.jsp el parámetro es leído y la parte personalizada de la página se representa.

<c:choose>
  <c:when test="${param.sectionName == 'HEAD'}">
     head section here [without the <HEAD> tags !]
  </c:when>
  <c:otherwise>
     body section here [without the <BODY> tags !]
  </c:otherwise>
</c:choose>

no muy agradable de ver, pero trabajando. De esta manera soy capaz de eliminar la duplicación de HEAD y BODY partes.

Otros consejos

Usted no puede y no debe combinar dos documentos <html> en sí. Esto produciría la salida válida. Mejor incluir CSS / JS condicionalmente con la ayuda de JSTL < a href = "http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/c/if.html" rel = "nofollow noreferrer"> c:if o etiquetas noreferrer c:choose .

Ejemplo básico:

<head>
    <script type="text/javascript" src="global.js"></script>
    <c:if test="${isAdminPage}">
        <script type="text/javascript" src="admin.js"></script>
    </c:if>
</head>

Fuera de SiteMesh, que está bastante fuera de suerte. Sin embargo, me volvería a considerar su diseño si usted piensa que la configuración por página es poco práctico. Cuántas páginas tendrá su aplicación para tener?

También podría extender la opción condicional, y hacer una meta.jsp (por ejemplo), que contiene una Map para cada uno de los elementos del cabezal - etiquetas meta, hrefs css, hrefs guión, y utilizar el nombre de la JSP como una clave en ese mapa. Posteriormente, se llama request.getRequestURI(), y mostrar lo que han puesto en el mapa en esa tecla. No es una solución muy bonito, pero trabajando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top