2016-02-25 4 views
0

Я использую 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>"); 
    }  
%> 
+0

В JSTL, вы не можете печатать такие методы, как это. Значение 'getName()' недействительно, поэтому оно ничего не печатает. try '$ {current.name}' – bmarkham

+0

Это также не работает, я также добавил немного больше информации в конец моего оригинального сообщения. – Alan

+0

Можете ли вы разместить свой java-файл? Я думаю, что это поможет мне и другим, а также – bmarkham

ответ

0
<c:forEach items="${CalculationBean.CandidateList}" var="current"> 

Попробуйте это и есть геттер сеттер для списка.

0

из этой линии:

<c:forEach items="${CalculationBean.getCandidateList()}" var="current"> 

Я думаю:

<c:forEach items="${CalculationBean.candidateList}" var="current"> 
     <tr> 
      <td><c:out value="${current.name}"/></td> 
      <td><c:out value="${current.score}"/></td> 

     </tr> 

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