Java Thymeleaf包含带有自己控制器的模板

Java Thymeleaf包含带有自己控制器的模板,java,spring,thymeleaf,Java,Spring,Thymeleaf,我试图在不同的页面中包含相同的html。此模板是显示数据库中数据的表。我知道Thymeleaf有片段,但据我所知,我不能将片段包含在自己的控制器中,我的模板需要它才能检索必要的数据 我已经看到了,但是这个模板可以在同一个页面上多次调用,并且向模型添加许多属性似乎不是正确的解决方案(更不用说属性名称必须是唯一的) 有没有办法将此模板包含在Thymeleaf中,使其具有自己的控制器,与包含的页面分开。没有,仅使用Thymeleaf是不可能的。每页一个控制器 除了简单地添加所有属性之外,还有其他选择。

我试图在不同的页面中包含相同的html。此模板是显示数据库中数据的表。我知道Thymeleaf有片段,但据我所知,我不能将片段包含在自己的控制器中,我的模板需要它才能检索必要的数据

我已经看到了,但是这个模板可以在同一个页面上多次调用,并且向模型添加许多属性似乎不是正确的解决方案(更不用说属性名称必须是唯一的)


有没有办法将此模板包含在Thymeleaf中,使其具有自己的控制器,与包含的页面分开。

没有,仅使用Thymeleaf是不可能的。每页一个控制器

除了简单地添加所有属性之外,还有其他选择。您可以在模型上放置一个集合(列表或映射),并将片段索引到其中以获取它们的数据。(您可以将参数传递给片段。)


或者说是一个javascript解决方案。

我使用一种我称之为“基于服务的呈现”的方法:

背后的想法是通过
@someService
利用Springbeans集成

您可以使用来自模型、requestmapping、模板或片段参数的参数或从任何可以获得这些参数的地方调用任何bean,而不是填充
模型

小例子:

<div th:each="someVar : ${@someService.getData(someParameter)}" th:text="${someVar}">Template Text</div>
模板文本

虽然这是可能的(也可能是您正在寻找的解决方案),但我认为这样做总体上是个坏主意。它违反了MVC的原则(忽略了模型/控制器),并使您的代码更难维护和调试。@Metroids:我不同意。我发现维护更容易,因为这样可以构建“可重用组件”。我说的不是业务服务,而是组件服务
Component
是一个可扩展的注释,因此您可以像在我的例子中一样构建一个生活在servletcontext中的
UIService
。模型是resultset/entitylist,片段是视图。如果你喜欢,我可以用一个例子来编辑答案。