【问题标题】:Server Sent Events in Spring boot and thymeleafSpring boot 和 thymeleaf 中的服务器发送事件
【发布时间】:2020-10-04 04:19:15
【问题描述】:

我正在使用带有 thymeleaf 模板引擎的 Spring Boot。如果新对象保存在数据库中,我需要将更新从服务器推送到浏览器。但由于 sse 只允许发送文本数据,我如何使用 sse 传递对象。到目前为止,我唯一读过的是我可以使用 JSON.parse() 方法将字符串转换为 json。但这对我不起作用,因为 thymeleaf 使用对象来呈现 html。我是这些条款的新手,所以请帮助我,欢迎提出任何建议。

【问题讨论】:

    标签: spring-boot thymeleaf server-sent-events


    【解决方案1】:

    Thymeleaf 是一个模板引擎,允许您在服务器上呈现您的页面。

    一个基本示例如下所示:

    @Controller
    @RequestMapping("/")
    public class SampleViewController {
    
      @GetMapping
      public String getIndex(Model model) {
        model.addAttribute("message", "duke");
        model.addAttribute("order", new Order());
        return "index";
      }
    
    }
    

    当用户现在请求 / 时,index 模板将使用我们传递给它的 Model 呈现,例如替换:

    <h2>
      <span th:text="'Hello, ' + ${message}"></span>
    </h2>
    

    渲染后

    <h2>
      <span>Hello, duke</span>
    </h2>
    

    这或多或少是静态,因为只有在有人请求此页面时才会进行渲染。

    在您的情况下,您需要额外的动态行为。因此,您可以将 JavaScript 引入您的 Thymeleaf 模板并开始使用 SSE(例如,通过关注此 tutorial)。因此,每当从服务器发送事件时,您基本上都会注册到某个 SSE 事件流并在客户端更新您的页面。

    您可以将以下内容添加到您的 Thymeleaf 模板中:

    <script th:inline="javascript">
    
    
    </script> 
    

    并添加缺少的 JavaScript 部分以使 SSE 正常工作。

    因此,使用 Thymeleaf 作为模板引擎来呈现服务器端页面并不限制您将 JavaScript 添加到页面以在客户端具有动态行为(例如,用于 SSE、WebSockets、AJAX 调用)。

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2019-01-26
      • 2020-11-22
      • 1970-01-01
      • 2018-07-17
      • 2021-04-22
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多