Существует ли стандартный способ JSF или библиотека с открытым исходным кодом, которая позволяет выводить экранированный текст, но с форматированием HTML? - PullRequest
4 голосов
/ 10 января 2011

У нас есть сценарий использования, который нам нужен для вывода текста, который представляет собой комбинацию статического текста и динамических значений из базы данных, полный текст разрешается с использованием свойств сообщения со статическими текстовыми блоками для конкретного языка.

Нам нужно экранировать выходной текст, чтобы предотвратить атаки XSS.

Однако нам также необходимо применить форматирование к полной строке, например:

Hello <b>{username}</b>!

Это, конечно, псевдосинтаксис, {username} - это переменная, которая должна быть заменена реальным именем пользователя, другой текст является статическим и определен в свойстве сообщения (например, "Helloy <b>{0}</b>!").

Обычный выходной текст JSF не будет работать, поскольку он будет либо избегать всего, либо ничего, тем самым разрушая наше форматирование.

Обратите внимание, что мы не можем сделать из этих фрагментов "настоящий" компонент JSF, так как позицияи порядок полей переменных зависит от языка (например, различный порядок слов в немецком и английском языках).

В Seam этот компонент называется formattedText, который имеет дело с этим и имеет элегантное решение.,Однако мы не используем (и не можем) использовать Seam в нашем приложении.

Существуют ли похожие подходы / библиотеки?

1 Ответ

2 голосов
/ 10 января 2011

Просто примените JSTL fn:escapeXml к выходному параметру.

<h:outputFormat value="#{text['generic.welcome']}" escape="false">
    <f:param value="#{fn:escapeXml(user.name)}" />
</h:outputFormat>
...