我将使用Spring MVC,Thymeleaf和Flying-saucer在Java中生成pdf报告(大约20张幻灯片)。我希望能够根据不同的幻灯片构建代码,以便我可以轻松地添加和删除幻灯片,而不是在一个块中包含所有幻灯片的所有代码。最后,在Spring MVC和Thymeleaf完成之后,我想我会有很多XHTML和CSS准备发送到Flying-saucer进行PDF生成。
我还没有使用Spring MVC那么多,但我的感觉是你先做控制器的东西,例如获取数据,处理数据,然后在模型上放置必要的数据,以便Thymeleaf可以继续并根据模板和模型上的数据渲染视图。
如何以良好的模块化方式划分java和Thymeleaf中的代码部分?任何人都有一个好的设计可以受到启发,或者可以指向我在网上的某个地方,我可以找到关于此的好信息?
答案 0 :(得分:1)
在您的情况下,我建议将Thymeleaf模板分为三个部分 - 主模板,幻灯片和内容模板。您可以从Spring MVC控制器动态填充报表内容,也可以在Thymeleaf中以静态方式构建报表内容。
我提供骨架模板结构,因为我认为它是最好的(所有模板应该在根模板路径上)。如果要添加幻灯片,只需创建包含内容的新模板,然后将新行插入主模板。如果要删除幻灯片,只需删除相应的行。
主模板 - index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<th:block th:include="slide :: slide" th:with="content=${'content1'}"></th:block>
<th:block th:include="slide :: slide" th:with="content=${'content2'}"></th:block>
<th:block th:remove="tag" th:include="slide :: slide" th:with="content=${'content3'}"></th:block>
</body>
</html>
幻灯片模板 - slide.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body th:fragment="slide">
<div class="slide">
<div th:replace="${content} :: content"></div>
</div>
</body>
</html>
内容模板1 - content1.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<ul th:fragment="content">
<li>Content 1</li>
</ul>
</body>
</html>
内容模板2 - content2.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<span th:fragment="content">Content 2</span>
</body>
</html>
内容模板3 - content3.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<p th:fragment="content">
Content 3
</p>
</body>
</html>