Вы как-то упустили тот факт, что JSP является генератором кода HTML/CSS/JS, и вы ожидали, что выражения JSP EL выполняются «синхронно» с кодом JavaScript, встроенным в JSP-файл. Это неверно. JSP/EL работает на веб-сервере, создает HTML/CSS/JS-выход, в основном как один большой String
, который отправляется с веб-сервера на webbrowser, который, в свою очередь, запускает JSP/EL-выход HTML/CSS/JS.
Простой способ реализовать свою ошибку - сделать правый клик и Просмотреть исходный код в webbrowser (на странице JSP, содержащей теги и выражения EL, которые не выбрасывают исключение на стороне сервера, как это, конечно). Вы заметите, что на самом деле он не содержит ни одной строки кода JSP/EL.
В принципе, --count
в вашем фрагменте кода имеет силу только в JavaScript, а не в JSP, потому что вы в основном печататься ${count}
как переменная JavaScript var count
во время генерации HTML вывода. Но значение var count
в JavaScript никоим образом не влияет на значение ${count}
, которое используется далее в ${valueList.get(count)}
. ${count}
по-прежнему 38 и не достиг 37 или около того.
В этом была проблема. Теперь мы можем перейти к решению. Я не буду публиковать ответ, чтобы исправить конкретное ваше попытку решения по той простой причине, что это с высокого уровня было замечено неправильным решением основной проблемы, которую вы пытались решить: преобразование объекта модели Java в объект JavaScript.
Правильное решение для этого - преобразование объекта модели Java в строку в формате JSON на стороне Java, а затем передачу JSP печати так, как если бы это была переменная JavaScript. У вашего объекта модели Java также есть еще одна проблема: вы, кажется, разделили значения X и Y в двух отдельных списках, вместо того, чтобы использовать один список с сущностями, в свою очередь имеющими значения X и Y.
Сначала создайте объект с decent модель:
public class Point {
private int x;
private int y;
// Add/generate constructor+getter+setter+equals+hashcode.
}
Затем замените ваш XValueList
и YValueList
, как показано ниже:
List<Point> points = new ArrayList<>();
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
// ...
Затем используйте один из Java JSON APIs, чтобы преобразовать это в строку JSON.Я заеду Gson в примере ниже:
String pointsAsJson = new Gson().toJson(points);
Теперь JSP печатать его, как будто это переменная JS, правильный путь:
var data = {data: ${pointsAsJson} };
Нет необходимости неуклюжей петли здесь массировать данные вперед и назад.
Отлаживайте свой код, убедитесь, что ваш valueList имеет размер больше 38. –
где вы инициализировали счет? – ramp
Вы уверены, что это Java? – fge