2013-04-06 108 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。

使用会话属性或每次重新提交属性,它将工作。