0

初めて Web アプリケーションを作成しようとしています。あらゆる種類のチュートリアルとあらゆる種類のヘルプを使用していますが、なぜこれが起こるのかわかりません。今まではすべてうまくいきました:

サーブレット間で「ユーザー」属性を送信しようとしています。その一部を属性として送信し (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)

これを初めて使用するときは機能し、期待どおりの結果が得られますが、同じサーブレットに戻るか、他のサーブレットで同じコードを再度使用すると、java.lang.IndexOutOfBoundsExpcetion: Index: 0, Size: 0

データベースをまったく変更していない場合、どのようにこれが発生する可能性がありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

0

リクエスト属性「txt」が2回目はnullのようです。これはリクエスト属性なので、リクエスト中のみ有効です。毎回保存または送信しないとnullになります。

ユーザー名として null を指定すると、空のリストが生成されます。空のリストの最初の要素を読み取ろうとすると、IndexOutOfBoundsException が生成されます。

セッション属性を使用するか、毎回属性を再送信すると機能します。

于 2013-04-07T19:51:52.250 に答える