2016-10-27 64 views
3

我是Thymeleaf模板引擎的新手,我正在使用Spring Boot和Spring MVC製作應用程序。我正在配置application.properties具有多種內容的百里香佈局

我想知道我怎麼能只寫ONE佈局,但內容在許多文件:例如content1.htmlcontent2.html等,使用已有的頁眉,頁腳的佈局。

如果可能,我該如何從控制器發送將在佈局中替換的內容文件?

回答

3

你可以做這樣的事情。假設您創建一個頁面,其中將嵌入所有其他內容 - 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中交換內容時,只需在控制器的字符串中更改pagefragment參數。

+0

感謝您的回答@Branislav,但是當控制器的操作返回某些內容時,容器將搜索具有相同名稱的視圖返回!它永遠不會找到像「主:: ....」 – marherbi

+0

@MohamedRedaArherbi你試過嗎?我試過了,哦,是的,它會。您可以從控制器方法返回片段名稱表達式。 「main :: mainPage(...)」絕對是合法的。它會從'main.html'文件返回'mainPage'片段。 –

+0

的確,有一些進展,它接近解決方案,但是這個問題是當控制器返回視圖時,它會刪除主頁面中的所有代碼(html標籤,head標籤,所有css ... ) – marherbi