JSP页面

时间:2016-02-06 18:31:56

标签: java jsp arraylist indexoutofboundsexception

我想从Flat.ser文件中检索一下Flat类的一些问题,并且为此目的我写了这里报告的方法:

Flat.java

public static ArrayList<Flat> retreiveFlat() throws ClassNotFoundException, IOException {

    FileInputStream fis = new FileInputStream("path/Flat.ser");
    ObjectInputStream ois = new ObjectInputStream(fis);
    Flat f;
    ArrayList<Flat> al = new ArrayList<Flat>();

    while (fis.available() > 0) {
        Object retrieved = ois.readObject();
        if(retrieved instanceof Flat) {
            f = (Flat) retrieved;
            if(f.getTypeOfFlat().equals("Double")) {
                al.add(f);
            }
        }
    }
    ois.close();
    return al;
}

该方法用于jsp页面:

Page.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="Entity.Flat" %>
<%@ page import="java.util.*" %>
<%
    ArrayList<Flat> al = new ArrayList<Flat>();
    al = Flat.retreiveFlat();
    int i = 0;
    while(al.get(i) != null){
      //do something   
    i++;}%>

问题是在jsp页面中al的istance是空的虽然我已经为它返回了retreiveFlat()方法的返回,但是在调试模式中我看到retreiveFlat()方法体内的列表是不是空的。所以当我在al上调用get()方法时,我得到了IndexOutOfBoundsException类型的异常。 任何人都可以告诉我哪里出错了?

1 个答案:

答案 0 :(得分:0)

我不知道为什么列表是空的,但是你试图迭代列表的确会抛出IndexOutOfBoundsException。您应该使用for-each循环(也称为enhanced for)。

替换

while(al.get(i) != null){
    // do something with al.get(i)
i++;}

用这个:

for(Flat flat : al) {
    // do something with flat
}