使用JSP制作Javascript数组时遇到麻烦

时间:2011-06-16 14:44:14

标签: javascript arrays jsp

我发现JSP在HTML方面效果很好但我常常在使用它生成Javascript时遇到问题。此代码无效,实际上当我尝试使用Chrome的调试工具检查元素时,页面崩溃了:

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>
                 ];

这里我想创建一个带有tableData的二维数组,一个ArrayList。 Eclipse在第一个&lt; c:when&gt;:

上显示错误
Syntax error, insert "]" to complete ArrayLiteral

谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果某些数组值是字符串,那么那就是你的问题 - 你必须引用它们。

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

现在,您还必须担心JavaScript的字符串常量标记语法中包含引号和其他元字符的字符串值。我使用自己的EL函数来“保护”字符串内容,类似于fn:escapeXml()。不幸的是,Java被及时冻结,因此没有内置的支持来生成JSON,这将消除整个练习。 (当然,我也有自己的EL功能,因为对于非奇特的数据结构来说真的不是很难。)