JSP从JavaBean通过ArrayList循环

时间:2016-02-25 01:14:17

标签: java jsp servlets arraylist javabeans

我正在使用带有JSP和Javabean的Servlet创建一个简单的投票系统。我有一个JavaBean帮助程序类(它是一个赋值要求),它获取用户cookie,其中包含投票选项,计算每个候选人的投票,创建一个包含所有信息的新候选对象,并将候选对象存储在ArrayList中JavaBean。我遇到的问题是我似乎无法遍历该ArrayList来输出每个候选人的信息。我已经谷歌搜索并在StackOverflow上查看了几个小时,但我没有尝试过任何工作。

到目前为止我所拥有的是以下内容

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>

这只输出一个带有表格标题的页面,然后输出&#34; $ {current.getName()}&#34;和getScore一样,它不会打印出来自对象的值。

CalculationBean中的arraylist填充在CalculationBean.calculateResults(request)调用上。我在eclipse中使用了调试器来确保这一点。

我还尝试过一个scriptlet,创建一个新的ArrayList并使用getCandidateList()方法获取列表,然后使用request.setAttribute(&#34; candidateList&#34;,arrayList);并使用&#34; candidateList&#34;尝试forEach中的项目。但这似乎也不起作用。

如果有人可以帮助或向我解释我做错了什么,那就太好了,谢谢。

编辑#1

我也忘了提到打印出来的是

候选人得分偏好 $ {current.name} $ {current.score}

但是数组列表中有5个候选项,所以如果循环代码正常工作,那么$ {current.name} $ {current.score}应打印5次而不是1次?

编辑#2

我也刚刚确认我可以使用scriptlet在普通java中执行此操作,以下代码代替for forEach标记代码可以正常工作,但我知道scriptlet现在不用担心了。

<%
    ArrayList<Candidate> list = CalculationBean.getCandidateList();
    for(Candidate c : list){
        out.print("<tr><td>"+c.getName()+"</td>");
        out.print("<td>"+c.getScore()+"</td></tr>");
    }       
%>

2 个答案:

答案 0 :(得分:0)

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

试试这个并为列表设置getter setter。

答案 1 :(得分: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>