2010-09-01 52 views
1

我使用JSTL來產生在JSP有點內嵌腳本的JavaScript對象,就像這樣:我如何禁用javascript的驗證在JSP中<script>標籤......在Eclipse

<script> 
    var data = [ 
     <c:forEach items="${MyData}" var="Datum" varStatus="status"> 
     { 
      foo: ${Datum.foo}, 
      bar: '${Datum.bar}' 
     }<c:if test="${not status.last}">,</c:if> 
     </c:forEach> 
    ]; 
</script> 

Eclipse完全無法驗證它。它生成的HTML是正確的 - 那麼如何讓Eclipse停止嘗試解釋/驗證JavaScript?

我在這裏遇到過很多類似的問題,但他們都沒有工作 - 包括去首選項->驗證和檢查「暫停所有驗證器」框!

+0

除此之外:您應該考慮使用合適的JSON編碼器來生成這種結構,而不是嘗試自己動手。否則,'Datum.bar'中的'''這樣的字符不會被轉義以適應JS字符串文字,並且會有腳本注入安全漏洞。 – bobince 2010-09-01 21:53:09

+0

@bobince - 你是完全正確的;我會最終到達那裏。現在,我只是想把原型放在一起,而我實際上使用'bar:'$ {fn:replace(Datum.bar,「'」,「\\'」)}「你提到的問題。字符串不是來自用戶輸入的...... – 2010-09-01 21:57:51

+0

注意'bar:...'後的最後一個逗號。它會使IE崩潰。 – slebetman 2010-09-01 21:57:54

回答

0

您是否試圖用CDATA轉義代碼?

<script> 
    //<![CDATA[ 
     ... 
    //]]> 
</script> 

帶或不帶//

+0

就像我希望固定的東西 - 沒有這樣的運氣。 – 2010-09-01 22:19:56

1

萬一有人仍有意解決方法;

將代碼放入一個jsp文件並將其包含在jsp文件中將會阻止javascript驗證。

<script><%@include file="data_include.jsp" %></script> 

另一種快速和骯髒的解決方法:

<script>var data = [];</script> 

<c:forEach items="${MyData}" var="Datum" varStatus="status"> 
    <c:out value="${'<script>'}" escapeXml="false"/> 
     data.push({ 
      foo: ${Datum.foo}, 
      bar: '${Datum.bar}' 
     }); 
    <c:out value="${'</script>'}" escapeXml="false"/> 
</c:forEach> 

即使你做的序列化在服務器端時,Eclipse(伽利略)仍給對C驗證錯誤:在腳本中並$ {}標籤。無論如何,我需要執行以下操作:

<c:out value="${'<script>var data = ${jsonData};</script>'}" escapeXml="false"/> 
相關問題