我不表示taglibs,我使用JSP标记执行以下操作:
ChildPage.jsp :
<%@ page contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:layout>
<jsp:attribute name="head">
<link href="css/custom.css" type="text/css" rel="stylesheet"/>
</jsp:attribute>
<jsp:attribute name="scripts">
<script src="js/custom.js"></script>
</jsp:attribute>
<jsp:body>
<p>This is from the child page</p>
</jsp:body>
</t:layout>
layout.tag :
<%@ tag description="Layout template" pageEncoding="UTF-8" %>
<%@ attribute name="head" fragment="true" %>
<%@ attribute name="scripts" fragment="true" %>
<!DOCTYPE html>
<html lang="en">
<head>
<link href="css/main.css" type="text/css" rel="stylesheet"/>
<jsp:invoke fragment="head"/>
</head>
<body>
<div id="body">
<p>This is from the parent or "layout"</p>
<jsp:doBody/>
</div>
<div id="footer">
<script src="js/main.js"></script>
<jsp:invoke fragment="scripts"/>
</div>
</body>
</html>
呈现时 :
<!DOCTYPE html>
<html lang="en">
<head>
<link href="css/main.css" type="text/css" rel="stylesheet"/>
<link href="css/custom.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<div id="body">
<p>This is from the parent or "layout"</p>
<p>This is from the child page</p>
</div>
<div id="footer">
<script src="js/main.js"></script>
<script src="js/custom.js"></script>
</div>
</body>
</html>
这允许我从布局页面和子页面中将脚本包含在JSP的头部分中。对于身体和页脚都是一样的。
我已经阅读了Thymeleaf文档/示例,但也许我没有正确理解,因为它看起来不像我想做的那样。
我之所以倒置&#34;看似简单的包含的是我拥有的每个页面都包含某些脚本和标题部分,但我的子页面也有要导入的脚本和要包含的样式表。
我能以某种方式实现这一目标吗?我做错了吗?
答案 0 :(得分:4)
默认情况下,Thymeleaf使用所谓的包含式布局。这种方法的缺点explained在官方网站上。我建议你使用Thymeleaf Layout Dialect。这是一种更方便的方言来创建分层式布局。
顺便说一句,在布局方言中,<head>
标签的所有内容都将自动合并。只需看看example。