我需要使用EL在文本区域内打印多行文本。当我这样做时:
<textarea rows="4">
${o.condition ? "blah" : "1. \n2. \n3. \n4."}
</textarea>
我明白了:
无法为JSP编译类
等同于
<%=o.getCondition() ? "blah" : "1. \n2. \n3. \n4." %>
使用EL?
有人建议将\n
存储在变量中并在表达式中使用此变量。
答案 0 :(得分:1)
假设你可以使用jstl标签,你可以像这样实现它。
<textarea rows="4">
<c:forTokens items="1.\n2.\n3.\n4." delims="\n" var="item">
${item}
</c:forTokens>
</textarea>
答案 1 :(得分:0)
根据所使用的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实体表示法表示为

。
<textarea rows="4">
${o.condition ? "blah" : "1. 
2. 
3. 
4."}
</textarea>
这样您就不依赖于目标运行时。