2013-12-12 2 views
1

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

Первая проблема заключается в том, что строки, исходящие из текстового поля, являются \ r \ n вместо br, но я мог просто просто заменить их все. Фактическая проблема, с которой мне нужна помощь, отображает ее после этого:

h: outputText по умолчанию запускает все, поэтому для того, чтобы заставить строки работать, мне нужно выполнить escape = «false», но по понятным причинам я не хотите, чтобы пользователь мог испортить страницу, введя другие теги HTML или, что еще хуже, Javascript. Поэтому мне нужно как-то избежать всего, кроме строк.

Как мне это сделать? Или может быть другой компонент JSF, который сделает это более простым?

К сожалению, предварительные теги или CSS-пробелы не являются вариантом.

+0

Попробуйте использовать регулярное выражение, которое может решить вашу проблему. –

+0

@Noman: Никогда не предлагайте использовать регулярное выражение для разбора HTML, не говоря уже о том, чтобы дезинфицировать входные данные от векторов атак. Это просто глупо. Используйте обычный анализатор на основе стека и используйте регулярное выражение только для задания, которое оно предназначено для: регулярного соответствия языкового шаблона. HTML не является обычным языком. – BalusC

+0

@BalusC спасибо, я буду помнить об этом :) –

ответ

1

Вместо того чтобы заменить \n на <br> и используя <h:outputText escape="false">, вы также можете просто отображать текст отформатирован так, что \n появляется как истинный символ новой строки. Вы можете использовать элемент CSS white-space property этого элемента, который может быть установлен на pre, pre-wrap или pre-line.

E.g.

<h:outputText value="#{bean.text}" styleClass="preformatted" /> 

с

.preformatted { 
    white-space: pre; 
} 

Если вы действительно намерены представить текст как немаскированный HTML, то вы можете дезинфицировать векторы атаки XSS прочь с помощью HTML-парсер, способного к работе, например, Jsoup , См. Также этот ответ, который я опубликовал вчера: JSF OutputText with html style.

+0

К сожалению, я не могу использовать пробел в этом конкретном случае, но я посмотрю на Jsoup. Bummer, что нет никакого встроенного способа сделать это в JSF. Вы можете подумать, что печать текста из текстового поля является довольно распространенным явлением ... – user3095339

+0

JSF - это генератор HTML, а не HTML-парсер. Просто используйте правильный инструмент для работы. CSS будет правильным инструментом для работы с HTML-презентацией. Не вина JSF в том, что вы по какой-то непонятной причине не можете этого сделать. – BalusC

Смежные вопросы