2013-04-06 78 views
0

我想第一次製作一個Web應用程序,我使用各種教程和任何形式的幫助,但我不明白爲什麼會發生這種情況。一切正常,直到現在:IndexOutOfBounds當執行NamedQuery兩次

我想傳遞一個「用戶」屬性之間的servlet,我這樣做是通過發送它的一部分作爲屬性(使用RequestDispatcher或HTML表單),並查找它在數據庫中休息,就像這樣:

String user = (String) request.getAttribute("txt"); 
Users info = (Users) emf.createEntityManager().createNamedQuery("Users.findByUsername").setParameter("username",user).getResultList().get(0); 

用戶名是唯一的關鍵,併爲NamedQuery代碼

@NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username) 

我第一次使用它,它的作品,我也得到了預期的結果,但是,如果我回到相同的servlet或者我再次使用相同的代碼其他servlet,我得到java.lang.IndexOutOfBoundsExpcetion: Index: 0, Size: 0

如果我在任何時候都沒有修改數據庫,怎麼會發生這種情況?

任何幫助,將不勝感激。

回答

0

看起來像你的請求屬性「txt」第二次爲空。這是一個請求屬性,所以它只會在請求期間有效。如果您不存儲它或每次提交它都將爲空。

空作爲用戶名將產生一個空列表。嘗試讀取空列表的第一個元素會產生IndexOutOfBoundsException。

使用會話屬性或每次重新提交屬性,它將工作。