3

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

就像slave.jsp它自己<head>处理 JavaScript 和 CSS 的部分一样,有没有一种方法或另一种方法可以将masterslave HEAD s 部分合并为一个部分?BODY部分也应该这样做。

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

4

4 回答 4

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部分的重复。

于 2009-12-03T18:14:32.180 回答
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>
于 2009-12-03T17:52:38.113 回答
0

在sitemesh之外,你几乎不走运。但是,如果您认为每页的设置不切实际,我会重新考虑您的设计。你的应用会有多少页?

于 2009-12-03T17:25:42.820 回答
0

您还可以扩展条件选项,并制作一个meta.jsp(例如),其中包含Map每个头部元素的 a - 元标记、css hrefs、脚本 hrefs,并使用 jsp 的名称作为该 Map 中的键。然后您调用request.getRequestURI(),并显示您在该键下放置在地图中的任何内容。不是一个非常漂亮的解决方案,但工作。

于 2009-12-03T17:56:08.350 回答