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

发布于 2024-08-14 05:53:47 字数 374 浏览 12 评论 0原文

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

由于 slave.jsp 有自己的 部分来处理 JavaScript 和 CSS,是否有一种方法或另一种方法来合并 master 和 slave HEAD 部分合并为一个?对于 BODY 部分也应该执行相同的操作。

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

I would like to include a JSP page into another JSP page. Let's say that I have master.jsp that is including slave.jsp.

As slave.jsp has its own <head> section for dealing with JavaScript and CSS, is there a way or maybe another method to merge the masterand slave HEADs section into a single one? Also the same should done for the BODYs section.

I have been using sitemesh recently but I think is quite impractical to setup a template for each page.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情深缘浅 2024-08-21 05:53:47

我通过在包含页面时传递参数来寻求此解决方案。

ma​​ster.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 部分的重复部分。

I went for this solution by passing a parameter when including the page.

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>

and then in slave.jsp the parameter is read and the custom part of the page is rendered.

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

not too nice to see but working. In this way I am able to remove the duplication of HEAD and BODY parts.

不如归去 2024-08-21 05:53:47

您不能也不应该相互合并两个 文档。这会产生无效的输出。在 JSTL 的帮助下更好地包含 CSS/JS a href="http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/c/if.html" rel="nofollow noreferrer">c:if< /a> 或 c:choose 标签。

基本示例:

<head>
    <script type="text/javascript" src="global.js"></script>
    <c:if test="${isAdminPage}">
        <script type="text/javascript" src="admin.js"></script>
    </c:if>
</head>

You cannot and should not merge two <html> documents in each other. This would produce invalid output. Better include CSS/JS conditionally with help of JSTL c:if or c:choose tags.

Basic example:

<head>
    <script type="text/javascript" src="global.js"></script>
    <c:if test="${isAdminPage}">
        <script type="text/javascript" src="admin.js"></script>
    </c:if>
</head>
情仇皆在手 2024-08-21 05:53:47

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

Outside of sitemesh, you're pretty much out of luck. However I would reconsider your design if you think that the setup per page is impractical. How many pages will your app have?

锦爱 2024-08-21 05:53:47

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

You could also extend the conditional option, and make a meta.jsp (for example), which contains a Map for each of the head elements - meta tags, css hrefs, script hrefs, and use the name of the jsp as a key in that Map. Then you call request.getRequestURI(), and show whatever you have put in the map under that key.
Not a very beautiful solution, but working.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文