是否有人知道是否可以隐藏布局:片段(如果未在调用页面中指定)?
例如,我有一个页面layout.html有类似的东西(其中有一个单独的fragment.html文件,包含页眉和页脚片段):
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
th:lang = "en">
<head>
<title layout:title-pattern="$CONTENT_TITLE">TITLE</title>
</head>
<body>
<header layout:replace="fragment :: header">HEADER</header>
<section layout:fragment="messages">MESSAGES</section>
<section layout:fragment="content">CONTENT</section>
<footer layout:replace="fragment :: footer">FOOTER</footer>
</body>
</html>
如果在布局的调用页面中我不想包含&#34;消息&#34;片段,有没有办法通过不包括该代码来做到这一点?例如(比如simple.html):
<html layout:decorator="layout">
<head>
<title th:text=#{PAGETITLE_SIMPLE}>SIMPLE PAGE TITLE</title>
</head>
<body>
<section layout:fragment="content">
<p>Put in some random content for the body of the simple page</p>
</section>
</body>
这仍然会在呈现的HTML中添加文本&#34; MESSAGES&#34;在&lt; section&gt; -tag。
中我已经能够加入这个simple.html
<section layout:fragment="messages" th:remove="all"></section>
但是这看起来有点草率,并且想知道是否有办法通过在布局中放置逻辑来完全忽略该片段,从布局用户那里隐藏它。
使用Spring 4.1.6,Thymleaf 2.1.4和布局方言1.3.3。
由于
答案 0 :(得分:1)
我能够通过将Serge Ballesta在How to check Thymeleaf fragment is defined中发布的方法应用于布局方言来解决这个问题。
这是重写的layout.html的样子:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
th:lang = "en">
<head>
<title layout:title-pattern="$CONTENT_TITLE">TITLE</title>
</head>
<body>
<header layout:replace="fragment :: header">HEADER</header>
<section layout:replace="this :: messages">MESSAGES</section>
<section layout:fragment="content">CONTENT</section>
<footer layout:replace="fragment :: footer">FOOTER</footer>
</body>
</html>
这样,如果调用页面(simple.html)只有&lt; section&gt;对于content
,不会为消息部分呈现HTML。但如果页面确实具有以下内容,则将按预期包含:
<section layout:fragment="messages">
<p>Message 1</p>
<p>Message 2</p>
</section>