2013-02-15 22 views
0

我在使用HttpSession将ArrayList userList作为来自原始Servlet的会话属性存储,然后将它传递给JSP。然后在下一个JSP中调用它,然后从该JSP中调用另一个Servlet。试图从servlet中的会话中检索arraylist

的Servlet 1 - > JSP1 - > JSP2 - > Servlet的2

在Servlet的1,我已经将它设置为会话:

if (!userList.isEmpty()) { 
    session.setAttribute("userList", userList); 
}  

我重复它在JSP 1和JSP 2和呼叫它再次在Servlet的2.我需要的ArrayList中的servlet被用作另一种方法的参数2.

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

它看起来像铸造是不是真的工作,因为该ArrayList的大小为1(I”米期待一个大小至少30)

我在做什么错?

+0

你得到的错误是什么? – Amit 2013-02-15 21:59:20

+0

umm .. a)这一切都在一个请求b)如果是,为什么你不把它保存为一个请求属性c)如果不是,你的机制从jsp转到servlet是什么d)即使它是,你为什么要从jsp去servlet? – eis 2013-02-15 21:59:38

+0

如果它在会话中,它在会话中。你确定你正在访问你认为你的数据吗?此外,如果您正在检查“List”,则不要强制转换为“ArrayList” - 将其转换为List。 – 2013-02-15 21:59:41

回答

0

铸造工作正常,与列表的大小无关。 Casting只是告诉你,你存储在userList中的东西实际上是一个ArrayList。如果大小不同,那么它似乎意味着在其他地方的逻辑中存在一个错误。拨打session.setAttribute()后,您是否更改变量userList所指的列表?

0

尝试铸造到List<UserApplication>