【发布时间】: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>
<h1> 标记会呈现,但变量中的内容不会。我也尝试过使用<c:set var="txt" value="${txt}" /> 和许多其他变体,但似乎没有任何效果。
有没有办法使这项工作或我没有看到的其他方法?我在网上找不到任何解释如何完成此操作的内容。
对于模板来说,这似乎是一件非常简单和常见的事情,而且从我在 JavaScript 世界中使用过的每一种模板语言来看,这都是受支持的,但我很惊讶这在 JSP 中并不容易。
【问题讨论】:
-
你试过
sitemesh吗? -
@lucumt 目前还没有。除非我遗漏了一些东西,否则 sitemesh 仍然需要您定义一个外部 HTML 结构,所以不确定它是否相同。另外,您的内容似乎必须位于特定位置?我正在开发一个包含数千个 JSP 的应用程序,所以不幸的是我不能移动所有内容
标签: java jsp templates jsp-tags