2016-12-05 66 views
-1

我对JSP非常陌生。无论如何,我试图用c:foreach打印列表中的每个对象,但它不起作用,我不知道为什么。我已经检查过类似的问题,但没有解决我的问题。c:foreach不打印对象

 <h2>  

     Your account information: 
     <% 
      LinkedList<BankAccount> accounts = null; 
      accounts = account1.getAccountList(); 
      request.setAttribute("accounts", account1.getAccountList()); 

     %> 


    </h2> 


<c:foreach items="${accounts}" var="acct"> 
<p>${acct.accountName}</p><br/> 
<p>$${acct.AccountBalance}</p><br/> 
    </c:foreach> 

<TD valign="top"><B><%=accounts.get(0).accountName%></b><br> 
<TD valign="top"><b>$<%=accounts.get(0).AccountBalance%></b></br> 
    </br></br> 
<TD valign="top"><b><%=accounts.get(1).accountName%></b><br> 
<TD valign="top"><b>$<%=accounts.get(1).AccountBalance%></b></br> 

底部代码工作--- accounts.get(0)等,但我不能,因为如果我将数据添加到数据库,然后我不得不每次添加更多的代码使用。

感谢您的帮助。

+0

要导入的库使用类似于这条线的东西? <%@ taglib prefix =“c”uri =“http://java.sun.com/jsp/jstl/core”%> – LeHill

+0

尴尬的是,没有。我添加了你的线,但它说它找不到。我也找不到任何下载。 – user3007447

回答

0

你没有提供有关BankAccount类的信息,因此我会做一个假设:

package testingThings.EL.linkedlist; 

public class BankAccount { 
    protected String accountName; 
    protected double accountBalance; 

    public BankAccount(String accountName, double accountBalance) { 
     this.accountName = accountName; 
     this.accountBalance = accountBalance; 
    } 

    public String getAccountName() { 
     return accountName; 
    } 

    public void setAccountName(String accountName) { 
     this.accountName = accountName; 
    } 

    public double getAccountBalance() { 
     return accountBalance; 
    } 

    public void setAccountBalance(double accountBalance) { 
     this.accountBalance = accountBalance; 
    } 

} 

我改变一个 ccountBalance 一个 ccountBalance坚持的约定。

在你的JSP中,你需要LeHill提到的那一行。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

不要忘了协议:HTTP://

的JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@ page import="testingThings.EL.linkedlist.BankAccount"%> 
<%@ page import="java.util.LinkedList"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
    <% 
     LinkedList<BankAccount> accounts = new LinkedList<BankAccount>(); 
     accounts.add(new BankAccount("acc1", 1000.00)); 
     accounts.add(new BankAccount("acc2", 2000.00)); 

     pageContext.setAttribute("accounts", accounts); 
    %> 
    <c:forEach items="${accounts}" var="acct"> 
     <p>${acct.accountName}</p> 
     <br /> 
     <p>${acct.accountBalance}</p> 
     <br /> 
    </c:forEach> 
</body> 
</html> 

在浏览器中输出:

acc1 

1000.0 

acc2 

2000.0 
0

它看起来像你没有getter和setters。 您的scriptlet的属性名称为“accountName”。 JSTL期望“get”或“is”作为bean方法名称的起点。 您无法直接调用该属性。你必须使用getter方法。 如果您创建了一个名为“getAccountName”的方法,它应该可以工作。

+0

我确实有getter和setter方法。我试图将其更改为“acct.getAccountName”,但这也不起作用。 – user3007447

+0

因此,对象BankAccount具有名为getAccountName和getAccountBalance的方法? – LeHill