You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Vaadin Flow的MessageList组件支持Markdown基础格式显示?

在Vaadin Flow的MessageList中渲染Markdown格式文本

1. 添加Markdown解析依赖

如果使用Maven,在pom.xml中引入CommonMark(轻量可靠的Markdown解析库):

<dependency>
    <groupId>org.commonmark</groupId>
    <artifactId>commonmark</artifactId>
    <version>0.21.0</version>
</dependency>
<!-- 可选:支持表格、任务列表等扩展语法 -->
<dependency>
    <groupId>org.commonmark</groupId>
    <artifactId>commonmark-ext-gfm-tables</artifactId>
    <version>0.21.0</version>
</dependency>

2. 编写Markdown转HTML工具类

创建工具方法完成Markdown到安全HTML的转换:

import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

public class MarkdownUtils {
    private static final Parser PARSER = Parser.builder().build();
    private static final HtmlRenderer RENDERER = HtmlRenderer.builder().build();

    public static String markdownToHtml(String markdown) {
        if (markdown == null || markdown.isBlank()) {
            return "";
        }
        Node document = PARSER.parse(markdown);
        return RENDERER.render(document);
    }
}

3. 自定义MessageListItem内容

不要使用MessageListItem.setText(),而是通过Html组件承载解析后的HTML内容:

import com.vaadin.flow.component.html.Html;
import com.vaadin.flow.component.messages.MessageList;
import com.vaadin.flow.component.messages.MessageListItem;

// 初始化MessageList组件
MessageList messageList = new MessageList();

// 示例带Markdown格式的文本
String markdownContent = "**System Accuracy**: Our algorithms are designed to perform searches almost instantly, providing you with accurate results.";

// 转换为HTML并创建Html组件
Html formattedHtml = new Html(MarkdownUtils.markdownToHtml(markdownContent));

// 构建消息项并添加到列表
MessageListItem messageItem = new MessageListItem();
messageItem.add(formattedHtml);
messageList.add(messageItem);

4. 关键注意事项

  • XSS防护:CommonMark默认会转义<script>等危险HTML标签,无需额外处理;若需允许特定标签,可通过HtmlRenderer配置调整,但不建议随意开启。
  • 样式适配:解析后的HTML可能需要自定义CSS,比如调整粗体、斜体的字体样式,确保和MessageList的默认UI风格匹配。
  • 扩展语法支持:如需解析表格、代码块等扩展Markdown语法,需修改Parser初始化逻辑:
import org.commonmark.ext.gfm.tables.TablesExtension;
import java.util.List;

// 带扩展的Parser初始化
private static final Parser PARSER = Parser.builder()
        .extensions(List.of(TablesExtension.create()))
        .build();

内容的提问来源于stack exchange,提问作者alexanoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:56:08