我要重新编写一个Web平台,并且正在使用Spring Boot / Spring MVC。该平台的主要部分是网站。我正在努力决定要使用哪个模板引擎。推荐使用Thymeleaf,但不建议使用JSP。我不确定我的要求是否异常,至少在我看来这些要求听起来不像是:
1)从Thymeleaf的角度出发,据我所知,推荐使用Layouts(仅?)方法。但是,在我看来,所有动态内容仍会在每个模板中生成(使用layout:fragment属性流入布局中)。这听起来不太理想,因为这意味着我仍然必须在每个模板中生成布局的动态部分。没有办法在Thymeleaf布局中包含动态内容,其中内容(菜单,页脚,twitter- feed等)是与实际内容模板分开生成的吗?
layout:fragment
2)JSP似乎能够使用布局的自定义标签轻松解决此问题,该标签具有<jsp:include>用于动态内容的- tags和<jsp:doBody>用于实际内容模板的-tag。但是,通过阅读Spring Boot文档,我以某种方式得到的印象是,鼓励使用与JSP不同的模板引擎。以上描述的方法但将让我限定header.jsp,navigation.jsp,footer.jsp和twitterFeed.jsp其生成动态内容(基于数据库的内容,登录的用户等),而实际内容模板纯粹的重点内容,以显示。在Thymeleaf和JSP之间进行比较时,我缺少什么,为什么我不选择JSP作为项目的模板引擎?
<jsp:include>
<jsp:doBody>
header.jsp
navigation.jsp
footer.jsp
twitterFeed.jsp
3)使用2)中所述的方法,我是否仅限于将我的所有Java逻辑放入主布局中的模板(页眉,导航,页脚,Twitter提要)的JSP中,还是有更好的方法用控制器类支持这些存根?
4)是否有其他模板引擎可以很好地与Spring MVC / Spring Boot集成在一起,这将是上述任何一种更好的选择?
Use可以使用Thymeleaf Ultraq Layout创建一个基本模板,该模板将充当其他模板的装饰器,如下所示:
base-template.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"> <head> <title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">Sample</title> <meta name="description" content=""/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <!-- all CSS links here --> </head> <body> <div class="container"> <div class="content"> <div layout:fragment="page_content"> <!-- Content from other pages which decorate using this template --> </div> </div> </div> <!-- /.container --> <!-- All script tags here --> <th:block layout:fragment="scripts"> <!-- If you have any page specific scripts --> </th:block> </body> </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" layout:decorate="~{base-template}"> <head> <title>This page title</title> </head> <div layout:fragment="page_content"> <!-- content for this page --> </div> <th:block layout:fragment="scripts"> <!-- add any scripts related to this page --> </th:block> </html>
语法从~{base-template}Thymeleaf 3开始使用。
~{base-template}
您可以继续上述方法,而不必在其他页面上重复导航,页眉和页脚。