0

我有一个看起来像这样的代码:

在 AnalyzeUserClient.jsp 中:

<c:set var="arrayList"><%= (ArrayList<String>)request.getSession().getAttribute("arrayList") %></c:set>
var sessionId = [];
<c:forEach items=${arrayList} var="id">
sessionId.push("${id}"); // add them one at a time, assuming string values
</c:forEach>

但是,这一行:

    sessionId.push("${id}");

似乎没有将值传递到数组“sessionId”(我在浏览器上查看了源代码)。所以问题是,我该怎么做才能将值传递到数组中?

编辑:我刚刚意识到存在一些问题,因为 JSTL 是服务器端而 JavaScript 是客户端。那么有解决方法吗?

4

1 回答 1

8

不要混合 EL 和 scriptlet。事实上,完全忘记 scriptlet:

var sessionId = [];
<c:forEach items="${sessionScope.arrayList}" var="id">
    sessionId.push("${id}"); 
</c:forEach>

请注意,如果其中一个 ID 恰好包含双引号,这将生成无效的 JavaScript。因此,您最好在控制器中使用 JavaScript 转义 ID。我会建议一种完全不同的方法:将 ID 列表序列化为控制器中的 JSON 字符串,并将此 JSON 字符串存储在请求属性中。JSP 页面只需要

var sessionId = ${jsonEncodedSessionIds};

这将转换为以下生成的代码:

var sessionId = ["id1", "id2"];
于 2012-11-02T07:30:07.433 回答