2015-07-09 4 views
0

В настоящее время я работаю над проектом, и я получил эту ошибку. Я не знаю, почему он останавливается на индекс 38. Ошибкаjava.lang.IndexOutOfBoundsException: Index: 38, Размер: 38

org.apache.jasper.JasperException: javax.el.ELException: java.lang.IndexOutOfBoundsException: Index: 38, Size: 38 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 

код, который я использовал для отображения был время цикла

var count = ${count}; 
while (--count) { 
     var val = ${valueList.get(count)}; //get value from her code 
     var xValue = ${XValueList.get(count)}; 
     var yValue = ${YValueList.get(count)}; 
     //max = Math.max(max, val); 
     // 
     min = 0; 
     var point = { 
     x: xValue, 
     y: yValue, 
     value: val 
     }; 
     points.push(point); 
    } 

    // var data = { max: max, min:min, data: points }; 
    var data = {data: points }; 
    return data; 
    }; 

И у меня есть 41 записей в моей базе данных. Любая помощь?

+0

Отлаживайте свой код, убедитесь, что ваш valueList имеет размер больше 38. –

+0

где вы инициализировали счет? – ramp

+3

Вы уверены, что это Java? – fge

ответ

3

Массивы начинаются с 0, но их размер задается в количестве полей. Массив размера 38 фактически имеет поля с 0 по 37. Доступ к полю 38 вызывает java.lang.IndexOutOfBoundsException.

2

Вы как-то упустили тот факт, что 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} }; 

Нет необходимости неуклюжей петли здесь массировать данные вперед и назад.

Смежные вопросы