Как мне обрабатывать объекты HTML в JSF

Я работаю над обновлением старой веб-программы, написанной на PHP, с базой данных MySQL в качестве серверной части.

База данных заполнена таким текстом <P><STRONG>

Что, очевидно, является закодированной формой <P><STRONG><FONT size=4>

Как я могу получить файл JSF для правильного отображения? Вывод его в виде экранированного текста дает мне 1-ю строку, а неэкранированный текст дает мне 2-ю строку.

Я хочу, чтобы HTML отображался как html в документе, я приму риск сделать это :)

Мне лучше расшифровать текст в базе данных? Я не уверен, что это тот формат, с которым я хочу работать в будущем, но у меня так мало опыта работы с объектами HTML, что я просто не уверен, что это лучший долгосрочный путь.

Здесь приветствуется все, от технических ноу-хау до бреда мудрых старых мудрецов.


person JHarnach    schedule 23.08.2011    source источник
comment
Извините, но что вы подразумеваете под Я хочу, чтобы HTML отображался в документе как html? Вы хотите буквально отображать текст <P><STRONG><FONT size=4> или вы хотите рендерить абзац жирным шрифтом, размер 4?   -  person Matt Ball    schedule 24.08.2011
comment
Кстати, тег HTML <font> устарел с 1998 года.   -  person BalusC    schedule 24.08.2011
comment
Первоначально я хотел отобразить документ с визуализированной разметкой, когда БД содержит HTML для таблицы, я хотел бы отобразить таблицу. Теперь, когда я перечитываю свой первоначальный вопрос, мне интересно, лучший ли это подход.   -  person JHarnach    schedule 24.08.2011


Ответы (1)


Как сделать так, чтобы JSF-файл правильно отображался? Вывод его в виде экранированного текста дает мне 1-ю строку, а неэкранированный текст дает мне 2-ю строку.

Оберните StringEscapeUtils#unescapeHtml() в функции EL (пример здесь) и отобразить его в <h:outputText> с escape="false".

<h:outputText value="#{util:unescapeHtml(bean.value)}" escape="false" />

Функция превратит &lt; в < и так далее, escape="false" предотвратит повторное экранирование JSF, чтобы не допустить буквальной интерпретации пользовательского ввода, который может создать дыры XSS.


Может лучше расшифровать текст в базе данных? Я не уверен, что хочу работать с этим форматом в будущем, но у меня так мало опыта работы с объектами HTML, что я просто не уверен, что это лучший долгосрочный путь.

Лучше всего вообще не хранить HTML в БД. Если другого варианта действительно нет, я бы предпочел расшифровать их прямо в БД.

person BalusC    schedule 23.08.2011
comment
Что это за обозначение util:unescapeHtml? Это ссылка на метод Java 8 с одним двоеточием? - person jordanpg; 28.07.2015
comment
@jordanpg: Нажмите на ссылку примера здесь. - person BalusC; 28.07.2015
comment
Значит, это настраиваемый тег Facelets (JSP?) внутри выражения значения? Это действительно предполагаемый вариант использования пользовательских тегов? IOW, в чем преимущество этого перед использованием управляемого компонента, например. utilBean.unescape(x)? - person jordanpg; 28.07.2015
comment
Это не пользовательский тег. Это функция ЭЛ. Невозможно вызвать статические методы для управляемого компонента (с сохранением состояния!) - person BalusC; 28.07.2015
comment
Для меня это выглядит как настраиваемый тег: docs.oracle.com/ javaee/7/tutorial/jsf-custom008.htm#BNAWN Попутно отмечу, что я никогда не видел функцию EL в официальных документах: docs.oracle.com/javaee/7/tutorial/jsf-el.htm#GJDDD - person jordanpg; 28.07.2015
comment
Кроме того, я до сих пор не понимаю, в чем преимущество определения util:method(x) над utilBean.method(x). Не должен быть статичным. - person jordanpg; 28.07.2015