Inclure une page JSP dans une autre page JSP, comment éviter plusieurs sections HEAD/BODY ?
-
12-09-2019 - |
Question
Je souhaite inclure une page JSP dans une autre page JSP.Disons que j'ai master.jsp
cela comprend slave.jsp
.
Comme slave.jsp
a sa propre <head>
section pour traiter JavaScript et CSS, existe-t-il un moyen ou peut-être une autre méthode pour fusionner le master
et slave
TÊTEs section en une seule ?Il faudrait également faire la même chose pour le CORPSsection.
j'ai utilisé sitemesh récemment, mais je pense qu'il est assez peu pratique de configurer un modèle pour chaque page.
La solution
Je suis allé à cette solution en faisant passer un paramètre en incluant la page.
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>
et slave.jsp le paramètre est lu et la partie personnalisée de la page est rendue.
<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>
pas trop belle à voir, mais travailler. De cette façon, je suis en mesure d'éliminer la duplication des pièces HEAD
et BODY
.
Autres conseils
Vous ne pouvez pas et ne doit pas fusionner deux documents de <html>
dans l'autre. Cela produira une sortie non valide. Mieux comprendre CSS / JS conditionnelle avec l'aide de JSTL < a href = "http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/c/if.html" rel = "nofollow noreferrer"> c:if
ou noreferrer c:choose
balises .
Exemple de base:
<head>
<script type="text/javascript" src="global.js"></script>
<c:if test="${isAdminPage}">
<script type="text/javascript" src="admin.js"></script>
</c:if>
</head>
En dehors de SiteMesh, vous êtes à peu près pas de chance. Cependant, je reconsidérer votre conception si vous pensez que la configuration par page est peu pratique. Combien de pages sera votre application ont?
Vous pouvez également étendre l'option conditionnelle et créer un meta.jsp
(par exemple), qui contient un Map
pour chacun des éléments principaux - balises méta, css hrefs, script hrefs et utilisez le nom du jsp comme clé dans cette carte.Puis tu appelles request.getRequestURI()
, et montrez tout ce que vous avez mis sur la carte sous cette clé.Ce n'est pas une très belle solution, mais cela fonctionne.