Thymeleaf有类似JSP标签的东西吗?

时间:2016-03-26 01:41:29

标签: java spring jsp spring-mvc thymeleaf

表示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;看似简单的包含的是我拥有的每个页面都包含某些脚本和标题部分,但我的子页面也有要导入的脚本和要包含的样式表。

我能以某种方式实现这一目标吗?我做错了吗?

1 个答案:

答案 0 :(得分:4)

默认情况下,Thymeleaf使用所谓的包含式布局。这种方法的缺点explained在官方网站上。我建议你使用Thymeleaf Layout Dialect。这是一种更方便的方言来创建分层式布局

顺便说一句,在布局方言中,<head>标签的所有内容都将自动合并。只需看看example