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

Struts2在JSP页面展示HTML格式数据无法解析为纯文本的问题求助

嘿,我之前也踩过Struts2这个处理HTML文本的坑!你遇到的问题核心是:Struts2对转义后HTML实体的处理逻辑和Struts1不一样,单纯用escapeXml或者escapeHtml根本达不到你要的“去掉标签留纯文本”的效果。

问题根源

你的数据是已经转义过的HTML实体(比如&lt;p&gt;、&amp;),而Struts2的escapeXml属性只是控制是否把原始特殊字符转成实体,反过来,escapeXml="false"只会把&lt;p&gt;还原成<p>标签,而不是去掉这些标签——这就是为什么你之前的尝试都没用。

解决方案

你需要两步处理:先把转义后的实体还原成真实的HTML内容,再剥离所有HTML标签,最后得到纯文本。下面给你两种可行的方法:

方法1:用Struts2内置的OGNL函数直接处理

Struts2自带了unescapeHtml(反转义HTML实体)和stripTags(剥离HTML标签)两个OGNL函数,把它们结合起来用就行:

<s:property value="stripTags(unescapeHtml(yourDataVariable))" />

举个例子,你的示例数据&lt;p&gt; Ladies &amp; gentelmen,&lt;br&gt; I am glad to announce my &lt;font color="#CF0066"&gt;Retirement on this......&lt;/p&gt;,经过这两个函数处理后,会先转成:
<p> Ladies & gentelmen,<br> I am glad to announce my <font color="#CF0066">Retirement on this......</p>
然后剥离所有标签,得到你想要的纯文本:Ladies & gentelmen, I am glad to announce my Retirement on this......

方法2:自定义工具类(更灵活可控)

如果内置函数满足不了你的特殊需求(比如想保留某些标签、自定义处理规则),可以自己写个工具类:

import org.apache.commons.text.StringEscapeUtils;

public class HtmlTextProcessor {
    public static String getPureTextFromEscapedHtml(String escapedHtml) {
        if (escapedHtml == null || escapedHtml.isEmpty()) {
            return "";
        }
        // 第一步:反转义HTML实体,得到真实的HTML内容
        String unescapedHtml = StringEscapeUtils.unescapeHtml4(escapedHtml);
        // 第二步:用正则剥离所有HTML标签
        return unescapedHtml.replaceAll("<[^>]+>", "").trim();
    }
}

然后在JSP里调用这个工具类的静态方法:

<s:property value="@com.yourpackage.HtmlTextProcessor@getPureTextFromEscapedHtml(yourDataVariable)" />

注意事项

  • 如果你用的是老版本的Struts2,可能没有内置的unescapeHtml函数,这时候直接用方法2的自定义工具类更稳妥。
  • 正则剥离HTML标签的方法适合大部分场景,但如果你的HTML内容非常复杂(比如包含嵌套标签、注释),可以考虑用Jsoup这类专业的HTML解析库来处理,效果会更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:14:28