从JSTL代码中设置javascript中的数组值

Mar*_*Koh 0 javascript jsp jstl

我有一个如下所示的代码:

在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>
Run Code Online (Sandbox Code Playgroud)

但是,这一行:

    sessionId.push("${id}");
Run Code Online (Sandbox Code Playgroud)

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

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

JB *_*zet 6

不要混用EL和scriptlet.实际上,完全忘掉了scriptlet:

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

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

var sessionId = ${jsonEncodedSessionIds};
Run Code Online (Sandbox Code Playgroud)

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

var sessionId = ["id1", "id2"];
Run Code Online (Sandbox Code Playgroud)