2013-02-15 76 views
0

我在從會話中檢索和投射ArrayList時遇到問題。我收到以下錯誤:Session對象中的ArrayList似乎丟失了內容

javax.servlet.ServletException: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 

我存儲在ArrayList中的會話:

List<UserApplication> userList = uaDAO.searchUser(eds); 
    if (!userList.isEmpty()) { 
    request.getSession().setAttribute("userList", userList); 
    action_forward = EDITSUCCESS; 

和鑄造會話對象ArrayList中,做了以下內容:

EditStudentForm edt = (EditStudentForm)form; 
    if ((session.getAttribute("userList")) instanceof List){ 
    List <UserApplication> studtList = (ArrayList<UserApplication>)session.getAttribute("userList"); 
    } 
    try { 
    uaDAO.editUser(edt,studtList); 
    action_forward = EDITSUCCESS; 
    } 

我m在DAO類中得到這裏的錯誤:

public void editUser(EditStudentForm edt,List studtList) throws Exception { 
    PreparedStatement pst = null; 
    StringBuilder sb = new StringBuilder(); 
    int stCode =Integer.parseInt(studtList.get(1).toString()); GETTING ERROR HERE 
    if (edt.getTitle() != null && !edt.getTitle().equals(studtList.get(2).toString())) { 
    sb.append("title = '").append(edt.getTitle()).append("'"); 
    } 
    . 
    . 
+0

請修改您的標題。 – entonio 2013-02-15 18:42:14

+0

謝謝大家的幫助。 – javaStudent 2013-02-15 19:08:15

+0

你好,看起來像鑄造不工作。有人請告訴我我做錯了什麼? – javaStudent 2013-02-15 19:35:53

回答

0

在此代碼:

EditStudentForm edt = (EditStudentForm)form; 
    if ((session.getAttribute("userList")) instanceof List){ 
    List <UserApplication> studtList = (ArrayList<UserApplication>)session.getAttribute("userList"); 
    } 
    try { 
    uaDAO.editUser(edt,studtList); 
    action_forward = EDITSUCCESS; 
    } 

您創建一個從來沒有使用過的新變量 'studtList'。它的範圍只是圍繞那條線的{}對。

在外部範圍內必須有另一個同名的變量studtList,因此'editUser()'調用可以工作。

附註

正如其他人已經回答了,它看起來像你可能會做一個獲得(1),並期待數組列表的第一個元素。也許。也許不會。

1

您明確要求列表中的第二個(studtList.get(1))和第三個(studtList.get(2))項目,但從未真正確定此列表是否足夠大。而且你的代碼顯然不甚至編譯:

if ((session.getAttribute("userList")) instanceof List){ 
    List <UserApplication> studtList = ///... 
} 
try { 
    uaDAO.editUser(edt,studtList); 

studtList是不可訪問的try塊,也圓括號中if聲明是無法比擬的。

1

檢查您的studtList值。 從錯誤似乎您studtList只包含一個項目,你正在嘗試使用此代碼來獲取第二項:

int stCode =Integer.parseInt(studtList.get(1).toString()); 

改變這樣的代碼:

public void editUser(EditStudentForm edt,List studtList) throws Exception { 
    PreparedStatement pst = null; 
    StringBuilder sb = new StringBuilder(); 
    if(studtList.size() > 1) 
     int stCode =Integer.parseInt(studtList.get(1).toString()); GETTING ERROR HERE 
    if (studtList.size() > 2 && edt.getTitle() != null && !edt.getTitle().equals(studtList.get(2).toString())) { 
    sb.append("title = '").append(edt.getTitle()).append("'"); 
    } 
    } 
1

studtList有沒有兩個元素和列表大小可能是1或0個元素,您應該在嘗試調用studtList.get(1)之前檢查它。在ArrayList索引編制從0開始,如果你想獲得第一個元素,你應該叫studtList.get(0)

相關問題