Thymeleaf片段与自己的控制器

时间:2015-10-06 07:53:40

标签: spring-mvc spring-boot thymeleaf

我想创建一个带有自己的控制器的百万美元片段,所以每当我包含片段时,调用控制器并填充必要的模型属性。对我而言,这听起来像是一个基本的要求,但我是百里香的新手,无法弄明白。例如,我有一个像这样的片段:

timeStamp

除了这个片段,我还有一个看起来像这样的控制器:

<div th:fragment="table">
  <tr th:each="prod : ${prods}">
    <td th:text="${prod.name}"/>
  </tr>
</div>

那么如何绑定这两个呢?我使用spring-boot而且我没有更改或编辑任何解析器。 谢谢,Peer

3 个答案:

答案 0 :(得分:0)

von Spring MVC和模型的想法是,在视图中只有数据被渲染。因此,从模板中的任何位置调用服务或控制器都是一个坏主意。

您可以使用函数addDataForTableFragment(Model model)解决此问题。这必须从您的控制器调用,该控制器将模板与片段一起使用。如果您需要多种方法的数据,请查看"ModelAttribute"

答案 1 :(得分:0)

我没有参考方便,但听起来你希望Thymeleaf元素进行REST调用并允许你使用结果修改DOM。它用于填充菜单或列表,控制可见性等。每个REST端点都是一个单独的控制器。

它可以对DOM进行更实质性的更改,但是你将失去使用框架的好处,因为一切都在服务器端完成。

有关Spring MVC和Thymeleaf的在线(Udemy?)课程的内容。

对于将来遇到这个问题的人 - 你会这样做,因为它允许Controller专注于做一件事。这意味着它们更简单,如果页面被修改并且需要提取额外的数据,您不必担心更改控制器。

它也更快,因为在准备响应之前,您不必等待所有数据可用(或超时)。您可以更快地做出响应 - 可能根本没有自定义数据 - 并且在自定义数据可用时填充自定义数据。

最后,并不要求所有数据都来自同一个地方。如果每个微服务提供一个REST控制器,但不对数据的使用方式做任何假设,那么使用具有专业化的微服务要容易得多。

答案 2 :(得分:0)

您可以使用

在当前页面中添加其他响应
<th:block th:utext="${#servletContext.getRequestDispatcher('/path/to/fragment').include(#request,#response)}"/>

(方法返回void,用utext包裹以简单地调用它)

如果这是常见情况,您可以将其变为接受路径参数的片段

<th:block th:fragment="include(url)">
    <th:block th:utext="${#servletContext.getRequestDispatcher(url).include(#request,#response)}"/>
</th:block>

并致电

<th:block th:include="~{::include(url='/path/to/fragment')}"/>