将JSP页面包含到另一个JSP页面中,如何避免多个HEAD / BODY段?

时间:2009-12-03 16:53:25

标签: jsp java-ee jspinclude

我想将JSP页面包含到另一个JSP页面中。假设我master.jsp包括slave.jsp

由于slave.jsp有自己的<head>部分来处理JavaScript和CSS,有没有办法或可能有另一种方法来合并masterslave HEAD 的章节分成一个?同样应该对 BODY 部分做同样的事情。

我最近一直在使用 sitemesh ,但我认为为每个页面设置模板是非常不切实际的。

4 个答案:

答案 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>

不太好看,但工作。通过这种方式,我可以删除HEADBODY部分的重复。

答案 1 :(得分:1)

您不能也不应该将两个<html>文档合并在一起。这会产生无效的输出。最好在JSTL c:ifc: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(),并在该键下显示你在地图中放置的任何内容。 不是一个非常漂亮的解决方案,但工作。