跳到主要内容
版本:7.0.3

HTML片段

Hunyuan 7b 中英对照 HTML Fragments

HTMXHotwire Turbo 强调一种“HTML over the wire”的技术方案,即客户端接收到的服务器更新是以 HTML 格式而非 JSON 格式传递的。这种方式让单页应用(SPA)的优势得以体现,而无需编写太多甚至完全不需要编写 JavaScript 代码。如需了解更多详细信息,请访问它们的官方网站。

在Spring MVC中,视图渲染通常涉及指定一个视图和一个模型。然而,在“HTML over the wire”(通过HTTP直接发送HTML)技术中,一个常见的功能是发送多个HTML片段,浏览器可以利用这些片段来更新页面的不同部分。为此,控制器方法可以返回Collection<ModelAndView>类型的结果。例如:

@GetMapping
List<ModelAndView> handle() {
return List.of(new ModelAndView("posts"), new ModelAndView("comments"));
}

通过返回专门的类型FragmentsRendering,也可以实现同样的功能:

@GetMapping
FragmentsRendering handle() {
return FragmentsRendering.fragment("posts").fragment("comments").build();
}

每个片段都可以拥有一个独立的模型,而该模型会从用于请求的共享模型中继承属性。

HTMX和Hotwire Turbo支持通过SSE(服务器发送的事件)进行流式更新。控制器可以使用SseEmitter来发送ModelAndView,以便根据每个事件渲染相应的片段:

@GetMapping
SseEmitter handle() {
SseEmitter emitter = new SseEmitter();
startWorkerThread(() -> {
try {
emitter.send(SseEmitter.event().data(new ModelAndView("posts")));
emitter.send(SseEmitter.event().data(new ModelAndView("comments")));
// ...
}
catch (IOException ex) {
// Cancel sending
}
});
return emitter;
}

同样的方法也可以通过返回 Flux modeleAndView> 来实现,或者通过 ReactiveAdapterRegistry 返回任何其他可以适配到 Reactive Streams Publisher 的类型。