2012-03-29 124 views
0

我正在處理Spring 2.5 MVC模塊,我使用模板從數據庫中獲取數據並返回列表...在列表中,我添加了Bean對象現在當我試圖從bean對象的顯示ClassCastException爲什麼這段代碼在Java中拋出ClassCastException Spring MVC

List listLogin = LoginDao.Authenticate(username,password); 
    Iterator it = listLogin.iterator(); 
    while (it.hasNext()) 
    { 
     Login bean1= (Login) it.next(); //here it is showing classCastException 
     System.out.println(bean1.getClinicId()); 
    } 

    public static List Authenticate(String userName, String password) { 
     List names = template.query("select clinicId from doc_user where userName='"+userName+"' and passwd='"+password+"'", 
      new RowMapper() { 
       public Object mapRow(ResultSet resultSet, int i) throws SQLException 
       { 
        ArrayList lst = new ArrayList(); 
        Login loginBean = new Login(); 
        loginBean.setClinicId(String.valueOf(resultSet.getInt(1))); 
        lst.add(loginBean); 
        return lst; 
       } 
     }); 
     return names; 
    } 
+1

作爲一個說明,將來還會發布異常的堆棧跟蹤。 – 2012-03-29 17:01:38

回答

2

這是因爲無論是(Login) it.next()回不是Login對象來獲取值。你既可以使用調試器和步進低谷,看看它返回或做窮人的版本,並打印出來,看看它是什麼返回:根據您的意見

while (it.hasNext()) 
    { 
     Object bean1= it.next(); 
     System.out.println(bean1.getClass().getName()); 
    } 

UPDATE:

你知道這是返回了包含登錄對象的列表清單:

while (it.hasNext()) 
{ 
    List list1 = (List)it.next(); 
    for (Object bean : list1) { 
     System.out.println(((Login)bean).getClinicId()); 
    } 
} 

我會說我認爲你正在做的事情錯了,你的查詢方式應該可以恢復登錄的列表開始。因爲它看起來像它的ArrayList父名單將只包含一個對象,所以你大概可以做:

public static List Authenticate(String userName, String password) { 
     List names = template.query("select clinicId from doc_user where userName='"+userName+"' and passwd='"+password+"'", 
      new RowMapper() { 
       public Object mapRow(ResultSet resultSet, int i) throws SQLException 
       { 
        Login loginBean = new Login(); 
        loginBean.setClinicId(String.valueOf(resultSet.getInt(1))); 
        return loginBean ; 
       } 
     }); 
     return names; 
} 

然後用你原本以爲會工作的代碼對其進行處理:

List listLogin = LoginDao.Authenticate(username,password); 

Iterator it = listLogin.iterator(); 
while (it.hasNext()) { 
    Login bean1= (Login) it.next(); 
    System.out.println(bean1.getClinicId()); 
} 
+0

我很感謝你的回答Mr jschoen ...我知道它正在返回ArrayList類的類型。但是,事情是,在這個列表對象我存儲Bean對象或對象,現在我想要Retrive對象屬性值...謝謝 – 2012-03-30 11:59:14

+0

我不知道你的意思。你是說你返回一個混合類型的對象列表嗎?有些是「列表」,有些是「登錄」類型等。如果是這種情況,是否考慮返回這些值的映射而不是列表。它會讓你更容易得到你想要的。另一個(可能更好的選擇)是創建一個新的類來保存這些屬性並返回該單個對象。 – 2012-03-30 12:58:46

+0

在代碼中「lst」是一個ArrayList對象 – 2012-03-30 14:08:02

相關問題