OK、次のスクリプトセクションを実行しているJSPがあります。Java Beanが正常に動作しない
<% 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は、いくつかのInquireRecordオブジェクトを格納するArrayListの特性を有しています。このデータは、マッチ・タームとしてmgrid as(2行目に設定されている)を使用してデータベースから取得します。
しかし、私はいくつかのテストを行ってきた、と私はpopulateCollection()は物事を行ってきていないので、それはだとかなり確信している11
ラインで表示されますどのようにIndexOutOfBounds例外を取得しています。私は0のサイズを与えるgetSizeメソッドを持っています。
私はすべての私のメソッドが動作していることを確認するためにEclipseでテストクラスを作った: package 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で何が違うのか分かりません。
だから私に言ってみれば、どんなに重大な間違いをしたのですか?
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);
}
}
私は、スクリプトレットコードをJSPに入れることは非常に悪いアプローチだと考えています。それは間違いです#1。 – duffymo
このテストコードですか?そうでなければ、あなたはデザインを静かに考え直すべきです...スクリプトレット/ロワーケースクラス名の多くのロジックirCollection/JDBCリソースは使用後に解放されません/ハードコーディングされた接続プロパティ... – Thomas
はい、テストコードです。スクリプトレットコードのアドバイスに感謝します。それのどれも実際の質問に答えません。私が実行すると、コードはテストJavaクラスで動作します。 **はjspで動作しません** –