2016-04-29 2 views
3

Кто-нибудь знает, возможно ли скрыть макет: фрагмент, если он не указан на вызывающей странице?Пытаться игнорировать неиспользуемый фрагмент макета в диалоговом окне Layout Tyymeleaf

Например, у меня есть страница 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> 

Если на странице вызова на макете что я не хочу включать фрагмент «сообщений», есть ли способ сделать это, просто не включая этот код? Например (скажем, 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 текст "Messages" внутри < секции > в тег.

Я был в состоянии поставить в этот simple.html

<section layout:fragment="messages" th:remove="all"></section> 

Но это, кажется, несколько коряво и было интересно, если есть способ, чтобы скрыть, что от пользователей макета, поставив логику в макет, чтобы полностью игнорировать этот фрагмент.

Использование Spring 4.1.6, Thymleaf 2.1.4 и Layout Dialect 1.3.3.

Благодаря

ответ

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) имеет только < раздел > для content, не HTML не будет оказано за раздел для сообщений. Но если страница имела следующие значения, она будет включаться по назначению:

<section layout:fragment="messages"> 
    <p>Message 1</p> 
    <p>Message 2</p> 
</section> 
Смежные вопросы