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

时间:2013-04-19 16:09:51

标签: jsf html-escape

我有以下代码:

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

结果是:

  

&LT p为H.;&LT b取代;位置。 &LT; / B个&lt; br /&gt;一个

来自#{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" />

然后结果是:

  

位置。
a

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

1 个答案:

答案 0 :(得分:4)

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

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

String unescapedShortDescription = StringEscapeUtils.unescapeXml(shortDescription);

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