我发现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
谁能看到我做错了什么?
答案 0 :(得分:1)
如果某些数组值是字符串,那么那就是你的问题 - 你必须引用它们。
<c:otherwise>
"${val}"
</c:otherwise>
现在,您还必须担心JavaScript的字符串常量标记语法中包含引号和其他元字符的字符串值。我使用自己的EL函数来“保护”字符串内容,类似于fn:escapeXml()
。不幸的是,Java被及时冻结,因此没有内置的支持来生成JSON,这将消除整个练习。 (当然,我也有自己的EL功能,因为对于非奇特的数据结构来说真的不是很难。)