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 とスクリプトレットを混在させないでください。実際、スクリプトレットのことは完全に忘れてください。

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

ただし、ID の 1 つに二重引用符が含まれていると、無効な JavaScript が生成されることに注意してください。そのため、コントローラで ID を JavaScript エスケープする方がよいでしょう。そして、まったく別のアプローチをお勧めします。コントローラーで ID のリストを JSON 文字列にシリアル化し、この JSON 文字列を request 属性に格納します。JSPページに必要なのは

var sessionId = ${jsonEncodedSessionIds};

これは、次の生成コードに変換されます。

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