3
我是Thymeleaf模板引擎的新手,我正在使用Spring Boot和Spring MVC製作應用程序。我正在配置application.properties
。具有多種內容的百里香佈局
我想知道我怎麼能只寫ONE佈局,但內容在許多文件:例如content1.html
,content2.html
等,使用已有的頁眉,頁腳的佈局。
如果可能,我該如何從控制器發送將在佈局中替換的內容文件?
我是Thymeleaf模板引擎的新手,我正在使用Spring Boot和Spring MVC製作應用程序。我正在配置application.properties
。具有多種內容的百里香佈局
我想知道我怎麼能只寫ONE佈局,但內容在許多文件:例如content1.html
,content2.html
等,使用已有的頁眉,頁腳的佈局。
如果可能,我該如何從控制器發送將在佈局中替換的內容文件?
你可以做這樣的事情。假設您創建一個頁面,其中將嵌入所有其他內容 - main.html
。它會是這個樣子:
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3" xmlns="http://www.w3.org/1999/xhtml">
<div th:fragment="mainPage(page, fragment)">
<h4>Some header</h4>
<div th:include="${page} :: ${fragment}"></div>
<h4>Some footer</h4>
</div>
</html>
然後你想創造一些頁面將被嵌入到你的main.html
頁 - some-page.html
:
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3" xmlns="http://www.w3.org/1999/xhtml">
<div th:fragment="somePage">
<h1>${title}</h1>
</div>
</html>
的目標是與內容中main.html
更換<div th:include="${page} :: ${fragment}"></div>
從some-page.html
。在控制器中,看起來像這樣:
@Controller
public class DemoController {
@RequestMapping
public String somePage(Model model) {
// Note that you can easy pass parameters to your "somePage" fragment
model.addAttribute("title", "Woa this works!");
return "main :: mainPage(page='some-page', fragment='somePage')";
}
}
然後你去!每次當您想要在main.html
中交換內容時,只需在控制器的字符串中更改page
和fragment
參數。
感謝您的回答@Branislav,但是當控制器的操作返回某些內容時,容器將搜索具有相同名稱的視圖返回!它永遠不會找到像「主:: ....」 – marherbi
@MohamedRedaArherbi你試過嗎?我試過了,哦,是的,它會。您可以從控制器方法返回片段名稱表達式。 「main :: mainPage(...)」絕對是合法的。它會從'main.html'文件返回'mainPage'片段。 –
的確,有一些進展,它接近解決方案,但是這個問題是當控制器返回視圖時,它會刪除主頁面中的所有代碼(html標籤,head標籤,所有css ... ) – marherbi