【问题标题】:Spring Boot Thymeleaf fragments from controllers instead of view beans来自控制器而不是视图 bean 的 Spring Boot Thymeleaf 片段
【发布时间】:2017-11-29 15:02:13
【问题描述】:

我已经阅读了文档,但仍然有些混乱。 假设我有一个名为 index.html 的模板。在 index.html 中,我想根据请求使用片段更新容器标签。 这是我的名为 searchResult.html 的片段:

<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
    <div th:fragment="searchResult">
    </div>
</body>
</html>

如果我希望此片段显示在 index.html 内的特定标签内,我该如何从控制器执行此操作?

@RequestMapping("/")
public String showIndex(){
 return "index";
}
@RequestMapping("/search")
public String search(){
 return "index :: searchResult";
}

在 showIndex() 中,我想显示除片段之外的所有内容。 在映射到 search() 的获取请求期间,我想返回包括片段在内的整个索引。我的模板和控制器应该是什么样的?

模板:

<html>
<body>
<div>Usual content shown all the time</div>
<div id="searchResult">
 THIS IS WHERE I WANT THE FRAGMENT TO BE INJECTED
</div>
</body>
</html>

【问题讨论】:

  • 或者我应该只是将搜索结果添加到模型并刷新索引,而我总是使用条件实用程序类为它标记 th:unless="${#lists.isEmpty ()}" ?

标签: spring spring-boot thymeleaf


【解决方案1】:

在大多数情况下,Thymeleaf 建立在简单的请求/响应工作流程之上。当你开始像这样添加控制器时:

@RequestMapping("/search")
public String search(){
  return "index :: searchResult";
}

您必须自己使用 javascript/ajax 调用该控制器并使用某种形式的 dom 操作来替换元素。 thymeleaf 没有根据变化自动更新片段的机制,片段主要是为了简化在多个页面上重复使用相同的 html,而不是在不刷新页面的情况下动态更新页面。

如果你想用百里香叶的方式来做,你的评论就是要走的路。

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 2017-04-14
    • 1970-01-01
    • 2017-04-09
    • 2016-01-24
    • 2014-07-05
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多