有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaJSP通过JavaBean中的ArrayList循环

我正在使用servlet和JSP以及Javabean来创建一个简单的投票系统。我有一个JavaBean助手类(这是一个分配要求),它获取一个用户cookies,其中包含投票选择,汇总每个候选人的投票,用所有这些信息创建一个新的候选人对象,并将候选人对象存储在JavaBean中的ArrayList中。我遇到的问题是,我似乎无法循环通过ArrayList来输出每个候选人的信息。我已经在谷歌上搜索和查看StackOverflow好几个小时了,但我试过的都不管用

到目前为止,我有以下几点

结果。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中的arraylist在CalculationBean上填充。calculateResults(请求)调用。我在eclipse中使用了调试器来确保这一点

我还在scriptlet中进行了尝试,创建了一个新的ArrayList,并使用getCandidateList()方法获取列表,然后请求。setAttribute(“候选列表”,arrayList);并尝试使用“候选列表”在forEach中查找项目,但这似乎也不起作用

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

编辑#1

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

考生成绩偏好 ${current.name}${current.score}

但是数组列表中有5个候选项,因此如果循环代码正常工作,是否应该将${current.name}${current.score}打印5次而不是1次

编辑#2

我还刚刚确认,我可以在普通java中使用scriptlet来实现这一点,下面的代码可以代替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) 个答案

  1. # 1 楼答案

    因为这条线:

     <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>
    

  2. # 2 楼答案

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

    Try this and have getter setter for the list.