1

我有以下代码:

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

结果是:

<p><b>位置。</b> <br /> 一

字符串 from#{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 标签?我不想逃避他们。

4

1 回答 1

4

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

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

String unescapedShortDescription = StringEscapeUtils.unescapeXml(shortDescription);

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

于 2013-04-19T16:28:51.920 回答