Einschließlich JSP-Seite in einer anderen JSP-Seite, wie mehrere HEAD / Körperabschnitte zu vermeiden?
-
12-09-2019 - |
Frage
Ich mag eine JSP-Seite in einer anderen JSP-Seite aufzunehmen. Lassen Sie uns sagen, dass ich master.jsp
haben, die slave.jsp
ist inkl.
Wie slave.jsp
seinen eigenen <head>
Abschnitt hat für den Umgang mit JavaScript und CSS, ist es eine Möglichkeit, oder vielleicht eine andere Methode, um den master
and slave
HEAD zu fusionieren s Abschnitt zu einem einzigen? Auch das gleiche gilt für die BODY s Abschnitt erfolgen sollte.
Ich habe mit sitemesh vor kurzem aber ich denke, ziemlich unpraktisch ist eine Vorlage für jede Seite einrichten.
Lösung
Ich habe für diese Lösung ging, indem ein Parameter , wenn einschließlich der Seite.
in 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>
und dann in slave.jsp der Parameter gelesen und die benutzerdefinierten Teil der Seite gerendert wird.
<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>
nicht zu schön zu sehen, aber die Arbeit. Auf diese Weise bin ich in der Lage, die Vervielfältigung von HEAD
und BODY
Teilen zu entfernen.
Andere Tipps
Sie können und sollten zwei <html>
Dokumente in nicht miteinander verschmelzen. Dies würde ungültige Ausgabe. Besser sind CSS / JS bedingt mit Hilfe von JSTL < a href = "http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/c/if.html" rel = "nofollow noreferrer"> c:if
oder c:choose
Tags.
Grund Beispiel:
<head>
<script type="text/javascript" src="global.js"></script>
<c:if test="${isAdminPage}">
<script type="text/javascript" src="admin.js"></script>
</c:if>
</head>
Außerhalb sitemesh, bist du ziemlich viel Glück. Allerdings würde ich Ihr Design überdenken, wenn Sie der Meinung sind, dass das Setup pro Seite unpraktisch ist. Wie viele Seiten werden Ihre app?
Sie können auch die bedingte Option, erweitern und eine meta.jsp
machen (zum Beispiel), die für jeden des Kopfelementes einen Map
enthält - Meta-Tags, CSS hrefs, Skript hrefs, und den Namen des jsp als Schlüssel verwenden in dieser Karte. Dann rufen Sie request.getRequestURI()
, und zeigen, was Sie in der Karte unter diesem Schlüssel zugewiesen sind.
Nicht eine sehr schöne Lösung, aber arbeiten.