我想将一个 JSP 页面包含到另一个 JSP 页面中。假设我有master.jsp
包括slave.jsp
.
就像slave.jsp
它自己<head>
处理 JavaScript 和 CSS 的部分一样,有没有一种方法或另一种方法可以将master
和slave
HEAD s 部分合并为一个部分?BODY部分也应该这样做。
我最近一直在使用sitemesh,但我认为为每个页面设置模板是非常不切实际的。
我想将一个 JSP 页面包含到另一个 JSP 页面中。假设我有master.jsp
包括slave.jsp
.
就像slave.jsp
它自己<head>
处理 JavaScript 和 CSS 的部分一样,有没有一种方法或另一种方法可以将master
和slave
HEAD s 部分合并为一个部分?BODY部分也应该这样做。
我最近一直在使用sitemesh,但我认为为每个页面设置模板是非常不切实际的。
我通过在包含页面时传递参数来寻求此解决方案。
在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>
然后在slave.jsp中读取参数并呈现页面的自定义部分。
<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>
不太好看到但工作。通过这种方式,我能够删除HEAD
和BODY
部分的重复。
在sitemesh之外,你几乎不走运。但是,如果您认为每页的设置不切实际,我会重新考虑您的设计。你的应用会有多少页?
您还可以扩展条件选项,并制作一个meta.jsp
(例如),其中包含Map
每个头部元素的 a - 元标记、css hrefs、脚本 hrefs,并使用 jsp 的名称作为该 Map 中的键。然后您调用request.getRequestURI()
,并显示您在该键下放置在地图中的任何内容。不是一个非常漂亮的解决方案,但工作。