【问题标题】:Thymeleaf include template with own controllerThymeleaf 包含带有自己控制器的模板
【发布时间】:2017-02-08 09:33:37
【问题描述】:

我正在尝试将相同的 html 位包含到各个页面中。该模板是一个显示数据库数据的表格。我知道 Thymeleaf 有片段,但据我所知,我不能将片段包含在自己的控制器中,我的模板需要它来检索必要的数据。

我见过this question,但是这个模板可以在同一个页面上被多次调用,并且向模型中添加很多属性似乎不是正确的解决方案(更不用说属性名称必须是唯一的) .

有没有办法在 Thymeleaf 中包含这个模板,所以它有自己的控制器,与它包含的页面分开。

【问题讨论】:

    标签: java spring thymeleaf


    【解决方案1】:

    我使用一种我称之为“基于服务的渲染”的方法:)

    背后的想法是通过 @someService 来利用 spring bean 集成。

    除了填充Model,您还可以调用任何bean,其参数来自模型、请求映射、模板或片段参数,或者来自您可以获取它们的任何地方。

    小例子:

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

    【讨论】:

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

    不,仅使用百里香是不可能的。每页一个控制器。

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

    那个或一个 javascript 解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多