h:outputText не отображает HTML из XML-ответа, несмотря на escape="false"

У меня есть следующий код:

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

Результат:

<Р> <б> Местоположение.
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" />

Тогда результат:

Место нахождения.

Как правильно отобразить теги HTML, полученные из XML? Я не хочу убегать от них.

1 ответ

Решение

Это потому, что ваш текст уже экранирован. escape="false" не убирает текст Он просто печатает текст как есть, а не экранирует его. Однако, поскольку ваш текст уже экранирован с самого начала, он отображается в экранированном виде. Удалить escape="false" и вы увидите, что это будет двойной выход. То есть каждый & становится &amp;,

Вы должны удалить это заранее. Apache Commons Lang StringEscapeUtils может пригодиться

String unescapedShortDescription = StringEscapeUtils.unescapeXml(shortDescription);

Затем вы можете использовать <h:outputText escape="false"> распечатать как есть.

Другие вопросы по тегам