В следующем примере я хочу создать только простой макет main.html
и home.html
, about.html
.
Подстраницы должны содержать только свое собственное содержимое, а не включения верхнего или нижнего колонтитула.
Это то, что у меня есть до сих пор, но как теперь я могу динамически заменить контент container
страницей, на которую нажали?
<html>
<body>
<div class = "navbar navbar-inverse navbar-fixed-top">
<div class = "container">
<div class = "navbar-header">
<a class = "navbar-brand" href = "/home">Home</a>
</div>
<div class = "navbar-collapse collapse">
<ul class = "nav navbar-nav">
<li class = "active"><a href = "/about">About</a></li>
</ul>
</div>
</div>
</div>
<div class = "container">
<p>This should always get replaced when a link is clicked</p>
<!--<div th:replace = "fragments/pagename :: pagename">-->
</div>
</body>
</html>
Если бы у меня была только одна страница, я мог бы заменить содержимое на <div th:replace = "fragments/about :: about">
, но как я мог бы сделать это динамически?
Полное обновление не помешало бы. Моя главная проблема заключается в том, что я не знаю, как я могу просто создать один единственный макет main.html, а затем динамически заменить фрагмент container
выше при нажатии ссылки на панели навигации. Поэтому, если щелкнуть «Домой», содержимое home.html должно быть введено в позицию фрагмента контейнера.
Вы проверили диалект макета? github.com/ultraq/thymeleaf-layout-dialect - я думаю, что это имеет больше смысла для такого рода вещей, чем замена тимелеафу.
Хорошо, это работает, но если я использую, например, журналы <section layout:fragment = "content">
Thymeleaf, поддержка этого выражения будет прекращена в будущих выпусках. Так что я бы больше смотрел на собственный подход тимелеафа. Но если я правильно понял, тимелеафу изначально не хватает этой функции? Я с трудом мог в это поверить, потому что в настоящее время большинство веб-страниц используют общий макет и просто хотят заменить панель содержимого как часть веб-страницы. Как это решают другие? Просто скопировать заголовок, панель навигации и фрагмент нижнего колонтитула на каждую страницу контента? Это противоречило бы любому принципу программиста DRY...
Правильно, тимелеаф из коробки не поддерживает ту инверсию, которую вы хотите (именно для этого и нужен layout-dialect). Я лично использую его во всех своих проектах тимелеафа (это даже упоминается в веб-сайт тимелеафа), поскольку встроенная замена/вставка просто недостаточно хороша. Что касается сообщения, которое вы получаете о том, что оно устарело... Я не уверен (я не вижу его в своих проектах). Вы уверены, что речь не идет об использовании фрагментарных выражений?
Сообщение об устаревании пришло от <html layout:decorate = "layout">
. Переписав его в <html layout:decorate = "~{layout}">
, исправил сообщение.
В любом случае, thymeleaf
, кажется, не имеет этой важной функции, поэтому использование диалекта макета thymeleaf-layout-dialect
— единственный выход.
Мне не совсем понятно, о чем вы спрашиваете ... вы проверили диалект раскладки тимелеафа? Thymeleaf — это серверный язык, поэтому вы не можете заменить фрагменты тимелеафа без полного обновления страницы.