如何在 EL 字符串文字中使用换行符?

How to use new line character inside EL string literal?

我需要使用 EL 在文本区域内打印多行文本。当我这样做时:

<textarea rows="4">
    ${o.condition ? "blah" : "1. \n2. \n3. \n4."}
</textarea>

我得到:

Unable to compile class for JSP

什么等同于

<%=o.getCondition() ? "blah" : "1. \n2. \n3. \n4." %>

使用 EL?

有人建议将 \n 存储在一个变量中并在表达式中使用该变量。

假设你可以使用jstl标签,你可以这样实现。

<textarea rows="4">
<c:forTokens items="1.\n2.\n3.\n4." delims="\n" var="item">
     ${item} 
</c:forTokens>
</textarea>

根据所使用的 EL 实现,您可能还需要转义反斜杠。就我而言,这适用于 Apache 的 EL 实现(如 a.o、Tomcat、WebSphere 等所使用),但不适用于 Oracle 的 EL 实现(如 a.o ].GlassFish、WildFly 等)。 EL 规范本身对此还不完全清楚(还)。

<textarea rows="4">
    ${o.condition ? "blah" : "1. \n2. \n3. \n4."}
</textarea>

但更安全的是使用 HTML 实体表示法。换行符是 character U+000A 可以用十六进制 HTML 实体表示法表示为 &#xa;.

<textarea rows="4">
    ${o.condition ? "blah" : "1. &#xa;2. &#xa;3. &#xa;4."}
</textarea>

这样您就不会依赖于目标运行时。