在h:outputText中转义除了换行符之外的所有内容

时间:2013-12-12 12:40:04

标签: jsf jsf-2

我有文本,用户在textarea中输入,我想在另一页上显示它。

第一个问题是来自textarea的换行符是\ r \ n而不是br,但我可以简单地替换所有换行符。我需要帮助的实际问题是在此之后显示:

h:默认情况下,outputText会转义所有内容,因此要使换行符正常工作,我需要执行escape =“false”,但由于显而易见的原因,我不希望用户通过输入其他内容来弄乱页面HTML标签甚至更糟,Javascript。所以我需要以某种方式逃避除了线路之外的一切。

我该怎么做?或者是否有一个不同的JSF组件可以使这更简单?

不幸的是,前标签或CSS空格不是一种选择。

1 个答案:

答案 0 :(得分:2)

您可以只显示预先格式化的文本,以便\n显示为真正的换行符,而不是将<br>替换为<h:outputText escape="false">并使用\n。您可以使用元素的CSS white-space property来设置prepre-wrappre-line

E.g。

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

.preformatted {
    white-space: pre;
}

如果确实打算将文本显示为未转义的HTML,那么您可以使用能够胜任该工作的HTML解析器(例如Jsoup)来消除XSS攻击向量。另见我昨天发布的这个答案:JSF OutputText with html style