我在从会话中检索和转换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("'");
}
.
.
答案 0 :(得分:1)
您明确要求列表中的第二个(studtList.get(1)
)和第三个(studtList.get(2)
)项,但从未真正确定此列表足够大。此外,您的代码显然甚至无法编译:
if ((session.getAttribute("userList")) instanceof List){
List <UserApplication> studtList = ///...
}
try {
uaDAO.editUser(edt,studtList);
在studtList
块中无法访问 try
,if
语句中的括号也无法匹配。
答案 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)并期待数组列表的第一个元素。也许。也许不是。