我想创建一个带有自己的控制器的百万美元片段,所以每当我包含片段时,调用控制器并填充必要的模型属性。对我而言,这听起来像是一个基本的要求,但我是百里香的新手,无法弄明白。例如,我有一个像这样的片段:
timeStamp
除了这个片段,我还有一个看起来像这样的控制器:
<div th:fragment="table">
<tr th:each="prod : ${prods}">
<td th:text="${prod.name}"/>
</tr>
</div>
那么如何绑定这两个呢?我使用spring-boot而且我没有更改或编辑任何解析器。 谢谢,Peer
答案 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')}"/>