如何在 Thymeleaf + spring boot 控制器中显示来自 Flux 的数据

Posted

技术标签:

【中文标题】如何在 Thymeleaf + spring boot 控制器中显示来自 Flux 的数据【英文标题】:How to display data from Flux in Thymleaf + springboot controller 【发布时间】:2019-11-26 23:35:31 【问题描述】:

我正在尝试显示从 Corda 节点接收到的进度跟踪器信息。我在 Springboot 控制器/Thymeleaf 中使用ReactiveDataDriverContextVariable 设置为控制器模型的属性,但它不起作用,它只显示我的变量的地址。

我已经尝试过site 中的教程

我的控制器看起来像(我设法从 Progresss tracker observable 创建了一个Flux,myFlux)

    public String index(final Model model) 

        // loads 1 and display 1, stream data, data driven mode.
        IReactiveDataDriverContextVariable reactiveDataDrivenMode =
                new ReactiveDataDriverContextVariable(myFlux, 100);

        model.addAttribute("progressTracker", reactiveDataDrivenMode);

        return "index";

    

我的百里香叶视图

        <table id="Progress" class="table table-striped">
            <thead>
            <tr>
                <th >Step</th>
            </tr>
            </thead>
            <tbody>
            <tr class="result" data-th-each="step: $progressTracker">
                <td>[[$step]]</td>
            </tr>
            </tbody>
        </table>

【问题讨论】:

您能否为您的问题提供更多背景信息?你能展示一下progresstracker 类以及你是如何获得这种通量的吗?在渲染方面您期望什么行为(网页应该立即渲染还是应该长期存在的进度信息?) 【参考方案1】:

当您说“显示我的变量的地址”时,我相信您所指的哈希对象哈希正在打印,因为没有适当的 toString() 方法。

我相信您正在尝试打印 observable 而不是订阅它。例如,当您执行以下操作时,它并没有做太多,因为您尝试打印 observable。

val handle = proxy.startTrackedFlow(::MyFlow, val1, val2);
println(handle.progress);

你实际上应该做的是:

 val handle = proxy.startTrackedFlow(::MyFlow, val1, val2);
 handle.progress?.subscribe 
      println(it)
 

它应该打印进度步骤。

【讨论】:

以上是关于如何在 Thymeleaf + spring boot 控制器中显示来自 Flux 的数据的主要内容,如果未能解决你的问题,请参考以下文章

thymeleaf 和 spring 控制器之间的值如何传递,反之亦然

如何在 Spring Boot 中使用 Thymeleaf 保存角色?

如何在 Spring Thymeleaf 中提交表格数据

如何在 thymeleaf 中访问 Spring session bean 范围

如何使用Thymeleaf在Spring中配置CharacterEncodingFilter?

如何使用 Thymeleaf 在 Spring Boot 应用程序中正确缓存数据