【问题标题】:h:outputText not rendering HTML from XML response in spite of escape="false"尽管有 escape="false",但 h:outputText 没有从 XML 响应中呈现 HTML
【发布时间】:2013-04-19 16:09:50
【问题描述】:

我有以下代码:

<h:outputText value="#{bean.shortDescription}" escape="false" />

结果是:

位置。
一个

#{bean.shortDescription} 中的字符串取自已转义的 XML 响应:

&lt;p&gt;&lt;b&gt;Location. &lt;/b&gt; &lt;br /&gt; a

如果我制作与上面相同的输出文本,但不是从 XML 中获取响应,我只是输入来自响应的转义字符串,例如:

<h:outputText value="&lt;p&gt;&lt;b&gt;Location. &lt;/b&gt; &lt;br /&gt; a" escape="false" />

那么结果是:

位置。
一个

如何正确呈现从 XML 获得的 HTML 标记?我不想逃避他们。

【问题讨论】:

    标签: jsf html-escape


    【解决方案1】:

    这是因为您的文本已经转义了。 escape="false" 没有 unescape 文本。它只是按原样打印文本而不是转义它。但是,由于您的文本从一开始就已经转义,因此它以转义形式出现。删除escape="false",你会看到它会被双重转义。 IE。每个&amp;amp; 都变成&amp;amp;

    您需要事先取消转义。 Apache Commons Lang StringEscapeUtils 可能会派上用场。

    String unescapedShortDescription = StringEscapeUtils.unescapeXml(shortDescription);
    

    然后,您可以使用&lt;h:outputText escape="false"&gt; 按原样打印。

    【讨论】:

    • 在设置 import org.apache.commons.lang3.StringEscapeUtils; 时遇到了一些麻烦,但它仍然可以正常工作。谢谢亲爱的先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2021-03-19
    • 2019-10-30
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多