2010-09-01 53 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"/>