0

我第一次尝试制作一个 Web 应用程序,我使用了各种教程和任何类型的帮助,但我不明白为什么会发生这种情况。到目前为止一切正常:

我正在尝试在 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

如果我在任何时候都没有修改数据库,怎么会发生这种情况?

任何帮助,将不胜感激。

4

1 回答 1

0

似乎您的请求属性“txt”第二次为空。它是一个请求属性,所以它只在请求期间有效。如果您不存储它或每次都提交它,它将为空。

null 作为用户名将产生一个空列表。尝试读取空列表的第一个元素会产生 IndexOutOfBoundsException。

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

于 2013-04-07T19:51:52.250 回答