【问题标题】:IndexOutOfBoundException on method called in a JSP Page在 JSP 页面中调用的方法上的 IndexOutOfBoundException
【发布时间】:2016-05-16 15:35:13
【问题描述】:

我想从文件 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++;}%>

问题是 al 的 istance 在 jsp 页面中是空的,尽管我已经将它分配给方法 retreiveFlat() 的返回,尽管在调试模式下我看到在 retreiveFlat() 方法的主体内部列表是不是空的。因此,当我在 al 上调用 get() 方法时,我得到了 IndexOutOfBoundsException 类型的异常。 谁能告诉我哪里出错了?

【问题讨论】:

    标签: java jsp arraylist indexoutofboundsexception


    【解决方案1】:

    我不知道为什么列表是空的,但是您尝试迭代列表确实会抛出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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      相关资源
      最近更新 更多