好的,我有一个运行以下脚本部分的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);
}
}
答案 0 :(得分:0)
您的IndexOutOfBounds
例外可能是由rownum
传递给mgrq.getCurRecords()
的价值造成的。
您的测试代码没有任何证据,因为您使用常量调用getCurRecords()
,该常量可能始终对您的系统有效,并且永远不会导致异常。
我的建议是使用调试器逐步遍历JSP中的代码,甚至只是打印出变量的值(尤其是pagedatum
,pagenum
和rownum
)你的JSP代码。
答案 1 :(得分:0)
您的JSP代码段是否正确?看起来你开始了
的大括号for (int i=0;i<10;i++) {
但我根本没有看到结束支撑。你能检查是否是这种情况,如果是,请正确修复代码吗?