【问题标题】:How to create a layout template using JSP?如何使用 JSP 创建布局模板?
【发布时间】:2018-09-22 00:24:39
【问题描述】:

我正在尝试创建一个布局模板,以便在各种 JSP 页面中重复使用,这样某些常见的 HTML(脚本、样式、元标记等)就不必到处重复了。

我对 JSP 不是很熟悉,但据我所知,这样做的方法是使用标记文件。我几乎可以工作,但似乎 JSP 不接受标记正文中的 JSP/Java 代码?

我的模板标签在WEB-INF/tags/layouts/base.tag:

<%@tag description="Base page layout" pageEncoding="UTF-8" %>
<%@attribute name="title" fragment="true" %>

<!DOCTYPE html>
<html>
  <head>
    <title><jsp:invoke fragment="title" /></title>
  </head>
  <body>
    <jsp:doBody />
  </body>
</html>

这是some-page.jsp

<%@taglib prefix="layout" tagdir="/WEB-INF/tags/layouts" %>

<% String txt = "Some text..."; %>

<layout:base>
  <jsp:attribute name="title">Hello!</jsp:attribute>
  <jsp:body>
    <h1><%= txt %></h1> 
  </jsp:body>
</layout:base>

&lt;h1&gt; 标记会呈现,但变量中的内容不会。我也尝试过使用&lt;c:set var="txt" value="${txt}" /&gt; 和许多其他变体,但似乎没有任何效果。

有没有办法使这项工作或我没有看到的其他方法?我在网上找不到任何解释如何完成此操作的内容。

对于模板来说,这似乎是一件非常简单和常见的事情,而且从我在 JavaScript 世界中使用过的每一种模板语言来看,这都是受支持的,但我很惊讶这在 JSP 中并不容易。

【问题讨论】:

  • 你试过sitemesh吗?
  • @lucumt 目前还没有。除非我遗漏了一些东西,否则 sitemesh 仍然需要您定义一个外部 HTML 结构,所以不确定它是否相同。另外,您的内容似乎必须位于特定位置?我正在开发一个包含数千个 JSP 的应用程序,所以不幸的是我不能移动所有内容

标签: java jsp templates jsp-tags


【解决方案1】:

如果我对问题的理解正确,请尝试将 &lt;jsp:doBody /&gt; 替换为 &lt;%@include file="some-page.jsp" %&gt;

some-page.jsp 是要插入的 JSP 代码。

【讨论】:

  • 我希望能够在我的 JSP 文件中使用模板,而不是将文件包含到另一个文件中。该模板将被数百个其他文件使用,因此我需要能够将内容放入每个页面的该模板的正文标记中。希望这能让我更清楚我想要做什么
  • 您的示例仅适用于一页。我想对任何页面执行此操作。我想为要使用的 JSP 页面定义父模板(例如 base.tag
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2013-05-03
  • 1970-01-01
  • 2011-12-16
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多