我想将JSP页面包含到另一个JSP页面中。假设我master.jsp
包括slave.jsp
。
由于slave.jsp
有自己的<head>
部分来处理JavaScript和CSS,有没有办法或可能有另一种方法来合并master
和slave
HEAD 的章节分成一个?同样应该对 BODY 部分做同样的事情。
我最近一直在使用 sitemesh ,但我认为为每个页面设置模板是非常不切实际的。
答案 0 :(得分:2)
通过在包含页面时传递参数,我选择了此解决方案。
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
部分的重复。
答案 1 :(得分:1)
您不能也不应该将两个<html>
文档合并在一起。这会产生无效的输出。最好在JSTL c:if
或c:choose
标记的帮助下有条件地包含CSS / JS。
基本示例:
<head>
<script type="text/javascript" src="global.js"></script>
<c:if test="${isAdminPage}">
<script type="text/javascript" src="admin.js"></script>
</c:if>
</head>
答案 2 :(得分:0)
在sitemesh之外,你几乎没有运气。但是,如果您认为每页的设置不切实际,我会重新考虑您的设计。您的应用会有多少页?
答案 3 :(得分:0)
您还可以扩展条件选项,并创建一个meta.jsp
(例如),其中包含每个头元素的Map
- 元标记,css href,脚本href和使用jsp的名称作为该Map中的键。然后你打电话给request.getRequestURI()
,并在该键下显示你在地图中放置的任何内容。
不是一个非常漂亮的解决方案,但工作。