Java Bean не работает должным образом - PullRequest
0 голосов
/ 21 июня 2011

ОК, у меня есть 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 as (установленный в строке 2) в качестве совпадающего термина.

Но я получаю исключение IndexOutOfBounds для того, что здесь отображается в строке 11.

Я провел несколько тестов, и я уверен, что это потому, что 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 голосов
/ 29 июня 2011

Ваш JSP Snippet правильный? Похоже, вы начали скобки для

for (int i=0;i<10;i++) {

но я не вижу конечных скобок для этого вообще. Можете ли вы проверить, так ли это, и если да, исправить код соответствующим образом?

0 голосов
/ 29 июня 2011

Ваше IndexOutOfBounds исключение, вероятно, вызвано тем, что значение rownum передано mgrq.getCurRecords().

Ваш тестовый код ничего не доказывает, потому что вы вызываете getCurRecords() с константой, котораявероятно, всегда действителен для вашей системы и никогда не вызовет исключение.

Я предлагаю пройтись по коду в вашем JSP с помощью отладчика или даже просто распечатать значение ваших переменных (особенно pagedatum, pagenum и rownum) в вашем коде JSP.

...