Java Bean无法按预期工作

时间:2011-06-20 22:51:54

标签: java jsp javabeans

好的,我有一个运行以下脚本部分的JSP。

<% irCollection mgrq = new irCollection();  
mgrq.setMgrid("Chris Novish"); 
mgrq.populateCollection();
int pagenum;
if (request.getParameter("p") != null) { 
String pagedatum=request.getParameter("p");
pagenum = Integer.parseInt(pagedatum); 
} else { pagenum = 0; }
for (int i=0;i<10;i++) {
int rownum = pagenum * 10 + i;
InquireRecord currec = mgrq.getCurRecords(rownum);
        out.println(currec.getID()); %>

irCollection有一个ArrayList属性,用于存储多个InquireRecord对象。它使用mgrid作为匹配项从数据库中获取此数据(在第2行中设置)。

但是我在第11行显示的内容中得到了一个IndexOutOfBounds异常。

我已经做了一些测试,我很确定这是因为populateCollection()没有完成任务。我有一个getSize方法,给我一个0的大小。

我在Eclipse中创建了一个测试类,以确保我的所有方法都正常工作:     包com.serco.inquire;

public class test {

    public static void main (String[] args) {
        String mgr = "Chris Novish";
    irCollection bob = new irCollection();
    bob.setMgrid(mgr);
    bob.populateCollection();
    InquireRecord fred = bob.getCurRecords(1);
    System.out.println(fred.getID());
}

}

那个测试类产生的正是我所期望的。 除了一些局部变量的名称之外,我无法在JSP中看到我的不同之处。

所以...告诉我,我做了什么无聊的错误?

为了彻底,这里是populateCollection()方法:

public void populateCollection() {
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String filename = "inquire.mdb";
        String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
        database+= filename.trim() + ";DriverID=22;READONLY=true}";
        Connection con = DriverManager.getConnection( database ,"","");
        Statement s = con.createStatement();
        s.execute ("SELECT * FROM inquiries WHERE manager = '" + mgrid + "'");
        ResultSet rs = s.getResultSet();
        int cur;
        if (rs != null) { 
        while (rs.next()) {
            cur = rs.getRow();
            cur -- ;
            int curID = rs.getInt("ID");
            this.newIR.setID(curID);
            String cursub = rs.getString("submitter");
            this.newIR.setSubmitter(cursub);
            this.iRecords.add(cur, this.newIR);
            }
        this.size = iRecords.size();
        this.pages = this.size / 10;
        int remain = this.size % 10;
        if (remain > 0) { this.pages++; }
                } else { System.out.println("no records."); }
    }
    catch (Throwable e) {
        System.out.println(e);
    }
}

2 个答案:

答案 0 :(得分:0)

您的IndexOutOfBounds例外可能是由rownum传递给mgrq.getCurRecords()的价值造成的。

您的测试代码没有任何证据,因为您使用常量调用getCurRecords(),该常量可能始终对您的系统有效,并且永远不会导致异常。

我的建议是使用调试器逐步遍历JSP中的代码,甚至只是打印出变量的值(尤其是pagedatumpagenumrownum)你的JSP代码。

答案 1 :(得分:0)

您的JSP代码段是否正确?看起来你开始了

的大括号
for (int i=0;i<10;i++) {

但我根本没有看到结束支撑。你能检查是否是这种情况,如果是,请正确修复代码吗?