2012-01-17 165 views
4

我想調用fn:在c:裏面替換EL裏面的c:out來替換報價字符。 COUT標籤終止(JSP編譯階段的錯誤):如何在JSTL/EL表達式中使用單引號和雙引號?

因爲XML解析器停在第一個雙引號,並認爲沒有C以下無法正常工作

<c:out value="${fn:replace(userName,'"','\\"')}"/> 

以下

<c:out value="${fn:replace(userName,'&quot;','\\&quot;')}"/> 

不起作用,可能是因爲更換功能並沒有看到實際的引號字符。

回答

5

<c:set>參數化它們。

<c:set var="search" value='"' /> 
<c:set var="replace" value='\\"' /> 
<c:out value="${fn:replace(userName, search, replace)}"/> 

無關的具體問題,你有還是沒有considered真正的JSON發電機?隨着例如GSON它的下面oneliner的問題,因爲user是fullworthy的Javabean:

String json = new Gson().toJson(user); 

你會得到語法上有效的JSON的情況下直接擺弄所有的方式來獲得JSP/JSTL/EL出示有效的JSON 。

+0

是的,謝謝你可能會使用它。不管怎麼說,如果JSTL/EL有這樣一個缺乏特徵的話。 – Dims 2012-01-17 20:24:21

+0

也許你只是在使用錯誤的工具;)JSP只是一種視圖技術,旨在動態地生成** HTML **。 JSTL/EL被簡化以適應這一目的。 – BalusC 2012-01-17 20:27:45

+0

Hm ...有時候我在迭代循環中生成JSON ...我相信Gson可以處理這個,但是我不覺得在發送之前在臨時對象中收集數據會很漂亮...另外,我不僅生成json,而且生成xml也......因此,這是一個想法,有一堆的所有這些交互的JSP ... – Dims 2012-01-17 20:31:14