2011-06-16 36 views
0

我发现JSP工作在HTML很好,但我常常用它来生成JavaScript有问题Javascript数组。此代码不能正常工作,而事实上,当我尝试检查与Chrome的调试工具元素的页面崩溃:捣乱使用JSP

var sensorData = [[ 
         <c:forEach items="${tableData}" var="val" varStatus="status"> 
          <c:set var="tempStr" value="X"/> 

          <c:choose> 
           <c:when test="${!fn:contains(val, tempStr)}"> 
            <fmt:formatNumber value="${val}" maxFractionDigits="0"/> 
           </c:when> 
           <c:otherwise> 
            ${val} 
           </c:otherwise> 
          </c:choose> 

          <c:choose> 
           <c:when test="${(status.index + 1) % width == 0 && !status.last}"> 
            ],[ 
           </c:when> 
           <c:when test="${status.last}"> 
            ] 
           </c:when> 
           <c:otherwise> 
            , 
           </c:otherwise> 
          </c:choose> 


     </c:forEach> 
       ]; 

在这里,我想创建资料表,一个ArrayList二维数组。 Eclipse是显示在第一<Ç错误:当>:

Syntax error, insert "]" to complete ArrayLiteral 

任何人都可以看到我在做什么错?

+0

我看不出有什么明显的,但你不说什么这些价值观的样子。您可以在Firefox/Firebug或“Tamper Data”Firefox插件中尝试它,以便您可以确切地查看代码生成的内容并找出问题所在。 – Pointy 2011-06-16 14:47:14

+0

@Ravi巴力以及它是真实的,当该列表是空的,他将与“[]”结束了,但它看起来不错,只要它不是空的。 – Pointy 2011-06-16 14:48:19

+1

我会忽略那个Eclipse错误信息 - 它只是愚蠢的。 – Pointy 2011-06-16 14:48:53

回答

1

如果某些数组值都是字符串,那么这就是你的问题,你必须说出来了—。

 <c:otherwise> 
      "${val}" 
     </c:otherwise> 

现在您还不得不担心JavaScript的字符串常量标记语法中包含引号和其他元字符的字符串值。我使用自己的EL功能来“保护”字符串内容,类似于fn:escapeXml()。不幸的是,Java被及时冻结,所以没有内置的JSON生成支持,这将避免整个操作。 (我也有我自己的EL功能,当然,因为它真的不是非常困难的非异国情调的数据结构。)

+0

Bah你是对的!那么这就是为什么我不喜欢在Javascript中使用JSP ......无论如何,我使用google-gson解决了这个问题,现在它正在工作,谢谢大家! – 2011-06-16 15:08:40