0

セッションからのArrayListの取得とキャストに問題があります。次のエラーが発生します。

    javax.servlet.ServletException: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

arrayListをセッションに保存しました:

    List<UserApplication> userList = uaDAO.searchUser(eds);
    if (!userList.isEmpty()) {
    request.getSession().setAttribute("userList", userList);
    action_forward = EDITSUCCESS;

セッションオブジェクトをArrayListにキャストするために、次のことを行いました。

    EditStudentForm edt = (EditStudentForm)form;
    if ((session.getAttribute("userList")) instanceof List){
    List <UserApplication> studtList = (ArrayList<UserApplication>)session.getAttribute("userList");
    }
    try {
    uaDAO.editUser(edt,studtList);
    action_forward = EDITSUCCESS;
    }

ここでDAOクラスでエラーが発生しています。

    public void editUser(EditStudentForm edt,List studtList) throws Exception {
    PreparedStatement pst = null;
    StringBuilder sb = new StringBuilder();
    int stCode =Integer.parseInt(studtList.get(1).toString());  GETTING ERROR HERE
    if (edt.getTitle() != null && !edt.getTitle().equals(studtList.get(2).toString())) {
    sb.append("title = '").append(edt.getTitle()).append("'");
    }
    .
    .
4

4 に答える 4

1

studtListあなたの価値をチェックしてください。エラーから、studtListアイテムが1つしか含まれていないようで、次のコードで2番目のアイテムを取得しようとしています:

int stCode =Integer.parseInt(studtList.get(1).toString());

次のようにコードを変更します。

  public void editUser(EditStudentForm edt,List studtList) throws Exception {
    PreparedStatement pst = null;
    StringBuilder sb = new StringBuilder();
    if(studtList.size() > 1)
        int stCode =Integer.parseInt(studtList.get(1).toString());  GETTING ERROR HERE
    if (studtList.size() > 2 && edt.getTitle() != null && !edt.getTitle().equals(studtList.get(2).toString())) {
    sb.append("title = '").append(edt.getTitle()).append("'");
    }
  }
于 2013-02-15T18:39:02.647 に答える
1

2studtListつの要素がなく、リストのサイズが 1 または 0 の要素である可能性があるため、 を呼び出す前に確認する必要がありますstudtList.get(1)。インデックス作成ではArrayList0 から開始し、最初の要素を取得する場合は を呼び出す必要がありますstudtList.get(0)

于 2013-02-15T18:41:14.600 に答える
1

studtList.get(1)リストの 2 番目 ( ) と 3 番目 ( ) の項目を明示的に要求してstudtList.get(2)いますが、このリストが十分な大きさであることを実際に確認することはありません。さらに、あなたのコードは明らかにコンパイルさえしません:

if ((session.getAttribute("userList")) instanceof List){
  List <UserApplication> studtList = ///...
}
try {
  uaDAO.editUser(edt,studtList);

studtListはブロック内でアクセスできず、ステートメントtry内の括弧も一致しません。if

于 2013-02-15T18:38:28.540 に答える
0

このコードでは:

 EditStudentForm edt = (EditStudentForm)form;
    if ((session.getAttribute("userList")) instanceof List){
    List <UserApplication> studtList = (ArrayList<UserApplication>)session.getAttribute("userList");
    }
    try {
    uaDAO.editUser(edt,studtList);
    action_forward = EDITSUCCESS;
    }

使用されない新しい変数「studtList」を作成します。スコープは、その 1 行の周囲の { } ペアのみです。

「editUser()」呼び出しが機能するように、外側のスコープには同じ名前の別の変数、スタッドリストが必要です。

追記事項

他の人々が答えたように、 .get(1) を実行していて、配列リストの最初の要素を期待しているようです。多分。そうでないかもしれない。

于 2013-02-15T18:44:10.610 に答える