Сумма элементов массива в jsp

Рейтинг: -2Ответов: 1Опубликовано: 17.08.2023

Помогите разобраться с jsp.
Страница получает массив, я могу его распечатать в цикле:

<c:forEach var="el" items="${currentStatement.marks}">
    <li>
        <p><c:out value="${el}" /></p>
    </li>
</c:forEach>

Но как посчитать сумму этого массива?
Пробую Scriplet, но такой фокус не проходит:

        <% int sum = 0;
           for (int i = 0; i < ${currentStatement.marks}.length; i++) {
              sum = sum + ${currentStatement.marks}[i];
           }
           out.println(sum);
        %>

Scriplet не понимает такой переменной, как и просто currentStatement.marks.

Так как передать массив в Scriplet? Или, может, есть способ посчитать без него?

Ответы

▲ 1Принят

Если я не ошибаюсь, синтаксис знака доллара и фигурных скобок, то есть, ${}, работает только в контексте тегов. Как, например, вы используете эту запись в c:forEach и в c:out.

Если же вы хотите обратиться к какому-то атрибуту в скриптлетах JSP-страниц, то тогда его нужно получать посредством обращения к тому объекту (request, session, context), в котором он хранится.

Любая JSP-страница имеет несколько неявных объектов, к которым мы можем запросто обращаться, пользуясь тем, что в конечном итоге JSP-страница - это обычный сервлет. Объект request - один из таких неявных объектов.

Вы сказали, что помещаете массив в request - тогда получить его оттуда в скриптлете можно следующим образом:

request.getAttribute("currentStatement.marks");

Правда, тип возвращаемого значения метода getAttribute() - это Object, поэтому нужно будет сделать соответствующее приведение типа. И далее уже можно будет работать с полученным массивом.

Единственное что, я не знаю, точка в данном случае - это часть имени, или это обращение к полю объекта. Если первое, то подходит вариант выше. Если второе - то тогда получаете объект как

request.getAttribute("currentStatement");

приводя тип, а затем получаете от данного объекта его поле-массив.