h:outputText не отображает HTML из XML-ответа, несмотря на escape="false"
У меня есть следующий код:
<h:outputText value="#{bean.shortDescription}" escape="false" />
Результат:
<Р> <б> Местоположение. b>
a
Строка из #{bean.shortDescription}
берется из XML-ответа, который экранирован:
<p><b>Location. </b> <br /> a
Если я создаю тот же текст вывода, что и выше, но вместо того, чтобы брать ответ из XML, я просто помещаю экранированную строку, полученную из ответа, например:
<h:outputText value="<p><b>Location. </b> <br /> a" escape="false" />
Тогда результат:
Место нахождения.
Как правильно отобразить теги HTML, полученные из XML? Я не хочу убегать от них.
1 ответ
Это потому, что ваш текст уже экранирован. escape="false"
не убирает текст Он просто печатает текст как есть, а не экранирует его. Однако, поскольку ваш текст уже экранирован с самого начала, он отображается в экранированном виде. Удалить escape="false"
и вы увидите, что это будет двойной выход. То есть каждый &
становится &
,
Вы должны удалить это заранее. Apache Commons Lang StringEscapeUtils
может пригодиться
String unescapedShortDescription = StringEscapeUtils.unescapeXml(shortDescription);
Затем вы можете использовать <h:outputText escape="false">
распечатать как есть.