JavaScript выполняется на стороне клиента, а скриптлеты, теги EL и JSP на стороне сервера.С точки зрения серверного кода JavaScript - это просто сгенерированный текст, как разметка HTML.
Итак, если вы хотите иметь цикл JavaScript, который циклически повторяет массив JavaScript на сгенерированной странице HTML, вам необходимо сгенерировать код JavaScript, который инициализирует массив, и цикл JavaScript.
Вот код JSP
var theArray = [<c:forEach items="${sessionScope.list}" var="item" varStatus="loopStatus">'${item}' <c:if ${!loopStatus.last}>, </c:if></c:forEach>];
for (var i = 0; i < theArray.length; i++) {
alert(theArray[i]);
}
Этот код JSP сгенерирует следующий код JavaScript, предполагая, что список в атрибуте сеанса содержит «банан», «яблоко» и «апельсин»:
var theArray = ['banana', 'apple', 'orange', ];
for (var i = 0; i < theArray.length; i++) {
alert(theArray[i]);
}
Удостоверьтесь, однако, чтобы правильно экранировать значения списка, чтобы генерировать правильный код JavaScript.Например, если бы одно из значений было "I'm cool"
, сгенерированный JavaScript был бы
var theArray = ['I'm cool', 'apple', 'orange', ];
, что больше не является допустимым.Используйте commons-lang StringEscapeUtils.escapeEcmaScript для экранирования значений.