Session对象中的ArrayList似乎丢失了内容

时间:2013-02-15 18:36:01

标签: java

我在从会话中检索和转换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 个答案:

答案 0 :(得分:1)

您明确要求列表中的第二个(studtList.get(1))和第三个(studtList.get(2))项,但从未真正确定此列表足够大。此外,您的代码显然甚至无法编译:

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

tryif语句中的括号也无法匹配。

答案 1 :(得分:1)

检查您的studtList值。 从错误看来,您的studtList只包含一个项目,并且您尝试使用此代码获取第二个项目:

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("'");
    }
  }

答案 2 :(得分:1)

studtList中,没有两个元素和列表大小可能是1或0个元素,您应该在尝试调用studtList.get(1)之前检查它。在ArrayList索引从0开始,如果你想获得第一个元素,你应该调用studtList.get(0)

答案 3 :(得分: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'。它的范围只是围绕这一行的{}对。

在外部作用域中必须有同名的名称studtList,因此'editUser()'调用可以正常工作。

附加说明

正如其他人回答的那样,看起来你可能正在做一个.get(1)并期待数组列表的第一个元素。也许。也许不是。