Я использую Servlets с JSP и Javabean для создания простой системы голосования. У меня есть вспомогательный класс JavaBean (это было требование назначения), которое получает файлы cookie пользователей, которые содержат выборы для голосования, подсчитывает голоса для каждого кандидата, создает новый объект-кандидат со всей этой информацией и сохраняет объект-кандидат в ArrayList в JavaBean. Проблема, с которой я сталкиваюсь, - это, по-видимому, не пропустить этот ArrayList для вывода информации для каждого кандидата. Я был Googling и смотрел StackOverflow в течение нескольких часов, но ничего, что я пробовал, работает.JSP Looping через ArrayList от JavaBean
То, что я до сих пор является следующая
Results.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<jsp:useBean id="CalculationBean" class="beans.CalculationBean" scope="session"/>
<% CalculationBean.calculateResults(request); %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ishka Election - Results so Far</title>
</head>
<body>
<h1>Ishka Election - Results so Far</h1>
<table>
<th>Candidate</th>
<th>Score</th>
<th>Preference</th>
</table>
<c:forEach items="${CalculationBean.getCandidateList()}" var="current">
<tr>
<td><c:out value="${current.name}"/></td>
<td><c:out value="${current.score}"/></td>
</tr>
</c:forEach>
</body>
</html>
Это просто выводит страницу с заголовками таблицы, а затем "$ {current.getName()}" и getScore , он не распечатывает значения из объекта.
Аррайалист в CalculationBean заполняется вызовом CalculationBean.calculateResults (запрос). Я использовал отладчик в eclipse, чтобы убедиться в этом.
Я также пробовал в скриптлет, создавая новый ArrayList и используя метод getCandidateList(), чтобы получить список, а затем request.setAttribute ("listList", arrayList); и пытается использовать элементы в forEach, используя «кандидат-лист», но это тоже не работает.
Если кто-нибудь может мне помочь или объяснить, что я делаю неправильно, было бы здорово, спасибо.
Редактировать # 1
я забыл упомянуть, что распечатывает является
кандидат Score Предпочтение $ {current.name} $ {} current.score
Но есть 5 Элементы-кандидаты в списке массивов, поэтому, если код цикла работал, должно быть напечатано $ {current.name} $ {current.score} 5 раз, а не 1?
Edit # 2
Я также подтвердил, что я могу сделать это в обычном Java с использованием скриптлет, следующий код на месте для Foreach теге код работает, но я знаю, скриптлетов осуждаются чтобы использовать его сейчас.
<%
ArrayList<Candidate> list = CalculationBean.getCandidateList();
for(Candidate c : list){
out.print("<tr><td>"+c.getName()+"</td>");
out.print("<td>"+c.getScore()+"</td></tr>");
}
%>
В JSTL, вы не можете печатать такие методы, как это. Значение 'getName()' недействительно, поэтому оно ничего не печатает. try '$ {current.name}' – bmarkham
Это также не работает, я также добавил немного больше информации в конец моего оригинального сообщения. – Alan
Можете ли вы разместить свой java-файл? Я думаю, что это поможет мне и другим, а также – bmarkham