首页 文章

h:尽管escape =“false”,outputText也没有从XML响应中呈现HTML

提问于
浏览
1

我有以下代码:

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

结果是:

<p> <b>位置 . </ b>
a

来自 #{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标记?我不想逃避他们 .

1 回答

  • 4

    这是因为你的文字是 already 转义的 . escape="false" 不会取消文本 . 它只是按原样打印文本而不是转义它 . 但是,由于您的文本已从开头转义,因此它以转义形式显示 . 删除 escape="false" ,您将看到它将被双重转义 . 即每 & 变成 &amp; .

    你需要事先取消它 . Apache Commons Lang StringEscapeUtils 可能会派上用场 .

    String unescapedShortDescription = StringEscapeUtils.unescapeXml(shortDescription);
    

    然后,您可以使用 <h:outputText escape="false"> 按原样打印 .

相关问题