2015-10-07 35 views
2

我需要使用EL在文本區域內打印多行文本。當我這樣做:如何在EL字符串內使用新行字符?

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

我得到:

無法編譯類JSP

什麼是使用EL相當於

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

有人建議將\n存儲在變量中,並在表達式中使用此變量。

回答

0

根據所使用的EL實現,您可能還需要轉義反斜槓。就我而言,這對於Apache的EL實現(如a.o. Tomcat,WebSphere等中使用的)是正確的,但不適用於Oracle的EL實現(如在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> 

這樣你就不依賴目標運行時。

+0

第一個選項僅打印Apache EL下的\ n。第二個很好。 – Gustavo

1

假設你可以使用jstl標籤,你可以像這樣實現它。

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

我的表情比較複雜。這就像 $ {condition? 「blah」:「1. \ n2。\ n3。\ n4。」} 所以,我不能使用'',因爲它在表達式中不起作用。 – Gustavo