求助!jsp页面迭代ArrayList问题!
主要问题概述:我的开发环境是struts1,现在我在我的action里面 把我需要在jsp页面遍历的集合request.getSession().setAttribute("list", al);了,然后我在jsp页面 ArrayList al=(ArrayList)request.getSession().getAttribute("list"); 奇怪的是,System.out.println(al);可以在控制台打印出我的表中的记录,但是System.out.println(al.size());就会抛出异常,在网上找了关于这个问题的资料,很多人都遇到了,但是没有明确的说明原因,今天我也遇到了,已经困扰我一天了,求大侠解救!
PS:我做了许多测试,当我声明一个int类型的ArrayList,结果就可以打印出来,没有任何问题:
ArrayList tt=new ArrayList(); tt.add("a"); tt.add("b"); tt.add("c"); System.out.println("测试:"+tt); request.setAttribute("tt", tt); SysUser user = (SysUser) request.getSession().getAttribute(Globals.USER_KEY); String sfs=user.getSfs(); String orgno=user.getOrgno(); String username=user.getUsername(); String condition =null; Connection conn = DBUtil.getConnection(); if (orgno.equals("21000002")&&(sfs.equals("") || (sfs==null)) ) { //当前user是监狱 System.out.println("1"); condition ="where to_sifasuo='"+username+"'and sfs is not null"; }else if (orgno.equals("21000003")&& (sfs.endsWith("司法所")||sfs.equals("农委"))) { //当前user是司法所 condition ="where (to_jianyu='"+username+"'or to_jianyu is null )and sfs is null"; } ArrayList al=new ArrayList(); Statement stmt=null; ResultSet rs=null; Tb_newTaskVo voo = null; String sql = "SELECT RWBT , YWLX , LYDW , LRY , BLSJ , URL FROM Tb_NewTask"+" "+condition; System.out.println(sql); //System.out.println(condition); try { stmt=conn.createStatement(); //System.out.println("1"); rs=stmt.executeQuery(sql); //System.out.println("2"); while(rs.next()){ voo = new Tb_newTaskVo(); voo.setrwbt(rs.getString(1)); voo.setywlx(rs.getString(2)); voo.setlydw(rs.getString(3)); voo.setlry(rs.getString(4)); voo.setblsj(rs.getDate(5)); voo.seturl(rs.getString(6)); al.add(voo); } } catch (Exception e) { conn.rollback(); e.printStackTrace(System.out); Pub.writeXmlErrorMessage(response, this.handleError(e)); } finally{ try { rs.close(); stmt.close(); if (conn != null) { conn.close(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(System.out); } } request.getSession().setAttribute("list", al); //request.setAttribute("list", al); ArrayList tt=new ArrayList(); tt.add("a"); tt.add("b"); tt.add("c"); System.out.println("测试:"+tt); request.setAttribute("tt", tt); request.getRequestDispatcher("/jsp/framework/newblueTemplate/task.jsp").forward(request, response); //System.out.flush(); //System.out.close(); //System.out.println(al); System.out.println("sql条件语句:"+condition+"**********************"); return null;
ArrayList al=(ArrayList)request.getSession().getAttribute("list"); //ArrayList al=(ArrayList)request.getAttribute("list");//类型转换错误 //ArrayList al=(ArrayList)session.getAttribute("list"); System.out.println(al.size()); //for(int i=0;i<al.size();i++){ //System.out.println(al.get(i)); //} System.out.println("执行了"); ArrayList tt=(ArrayList)request.getAttribute("tt");//可以取到!! System.out.println(tt);function doNewTask(){ //task.jsp一开始加载首先调用这个函数,把action传过去,根据action的不同条件,显示Tb_NewTask表的不同记录!!! try { //alert("error"); document.cookie="a=null"; //alert(getCookie("a")); location.href ="<%=request.getContextPath()%>/NewTask/newtask.do?method=newtask"; //window.location.href="/Test.jsp"; 这种写法是错误的!! } catch(e) {alert("wrong");}} function getCookie(cookieName) {//得到cookies var cookies=document.cookie.split("; ");//一个分号加一个空格 if (!cookies.length) {return "";} var pair=["",""]; for (var i=0;i< cookies.length;i++) { pair = cookies[i].split("=");//以赋值号分隔,第一位是Cookie名,第二位是Cookie值 if (pair[0]==cookieName) { break; } } return pair[1]; }function delCookie(cookieName) {//删除cookies var expires = new Date(); expires.setTime(expires.getTime()-1);//将expires设为一个过去的日期,浏览器会自动删除它 document.cookie = cookieName+"=; expires="+expires.toGMTString(); }function OnlydoOnce(){//onload里面的函数 if(getCookie("a")!="null"){ doNewTask(); }else{ document.cookie="a=OK"; //alert(getCookie("a")); } }
[解决办法]
request.getSession(ar)??
[解决办法]
request.getSession("list")
[解决办法]
ArrayList tt = new ArrayList(); tt.add("a"); tt.add("b"); tt.add("c"); System.out.println("测试:" + tt); request.getSession().setAttribute("tt", tt); request.getRequestDispatcher("../test.jsp") .forward(request, response);
[解决办法]
如果你在控制台中可以看到输出结果,但在程序的接口子程序未收到该值,可能是因为你这个ArrayList输出的值是Object类型,你可以尝试将该ArrayList值导入进list中应该可以解决传参问题。【仅供参考】