gpt4 book ai didi

jsf - :outputText does not break\r\n characters into new lines

转载 作者:行者123 更新时间:2023-12-03 06:06:50 32 4
gpt4 key购买 nike

我有一个String包含回车符和换行符的变量 \r\n .

text = "Text1\r\nText2\r\nText3";

我使用 <h:outputtext> 来呈现它.

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

但它无法识别换行符,并在网络浏览器中显示如下。

Text1 Text2 Text3

为什么 <h:outputText> 没有打破\n进入新行?

我该怎么办?我必须更换\n<br />

最佳答案

HTML 中的换行符由 <br /> 表示元素,而不是 \n特点。更重要的是,通过右键单击打开普通 HTML 源代码,在浏览器中查看源代码,您将“看到”\n遍及所有地方。然而,它们并没有在最终的 HTML 演示中呈现出来。只有<br />会的。

所以,是的,您需要将它们替换为 <br /> 。您可以使用JSTL functions为此:

<... xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions">

<h:outputText value="#{fn:replace(bean.text,'\n','&lt;br/&gt;')}" escape="false" />

注意:当使用 Apache EL 而不是 Oracle EL 时,请双转义反斜杠,如 \\n 中所示。 .

<h:outputText value="#{fn:replace(bean.text,'\\n','&lt;br/&gt;')}" escape="false" />

否则您将遇到异常,并显示消息 Failed to parse the expression with root cause org.apache.el.parser.ParseException: Encountered <ILLEGAL_CHARACTER> .

这一切都很丑陋,escape="false"使其对 XSS attacks 敏感如果该值来自最终用户输入而您不这样做sanitize事先。更好的选择是继续使用 \n并设置CSS white-space property在父元素上预先格式化。如果您想在 block 元素的上下文中换行,请设置 pre-wrap 。或者,如果您还想折叠空格和制表符,请设置 pre-line

例如

<h:outputText value="#{bean.text}" styleClass="preformatted" />
.preformatted {
white-space: pre-wrap;
}

关于jsf - :outputText does not break\r\n characters into new lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14647274/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com