这里是 index.jsp 中的一部分代码
<%@ page language="java" import="java.util.*,com.fb.model.*" pageEncoding="utf-8"%>
<%//得到结果集al
int pageCount=0;
ArrayList al=(ArrayList)request.getAttribute("al");
//我的问题出在这里,在请求index.jsp时用到数据库中的数据ArrayList al (上边),这时al一定为空,于是下边请求控制器调用model处理,控制器把结果集放在request中forward到index.jsp,...问题是第一次请求index.jsp时al为空,无法运行了,抛出一个空指针的异常,下面的if判断就不执行了,我该怎么半?
 if(al!=null){
 //得到pagecount
 String s_pageCount=(String)request.getAttribute("pageCount");

 pageCount=Integer.parseInt(s_pageCount);

 }else{
 request.getRequestDispatcher("ShowGoodsClServlet?flag=getGoodsPage&pageNow=1").forward(request,response);
 }
控制器 ShowGoodsClServlet 的代码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String flag=request.getParameter("flag");
if(flag.equals("showDetial"))
{
//得到要显示的货物的ID
String goodsId=request.getParameter("id");
//调用GoodsBeanBO处理
GoodsBeanBO gbb=new GoodsBeanBO();
GoodsBean gb=gbb.getGoodsBean(goodsId);
request.setAttribute("goodsDetial",gb);
request.getRequestDispatcher("showDetial.jsp").forward(request,response);
}else if(flag.equals("getGoodsPage")){
try{
int pageNow=1;
String s_pageNow=request.getParameter("pageNow");
if(s_pageNow!=null){
pageNow=Integer.parseInt(s_pageNow);
}

//调用model处理
GoodsBeanBO gbb=new GoodsBeanBO();
ArrayList al=gbb.getgoodsByPage(pageNow);
if(al!=null){
System.out.println("al not null");

}
int pageCount=gbb.getpageCount();
request.setAttribute("al", al);
request.setAttribute("pageCount",pageCount+"");
request.getRequestDispatcher("index.jsp").forward(request, response);

}catch(Exception e){
e.printStackTrace();
}


}

解决方案 »

  1.   

    "request.getAttribute("al")"你判断它试试,我看见你判断了,你的应该也没错吧!
      

  2.   

    应该al不是null 而是al里面的得到的东西是空的吧
      

  3.   

    先 if(request.getAttribute("al"))
    {
    ArrayList al=(ArrayList)request.getAttribute("al"); } 不先判断!如果是空的话 会报错把!
      

  4.   

    各位朋友请注意:我补充一下上边的问题。--------------------------------------------------------------------------------------
    <%@ page language="java" import="java.util.*,com.fb.model.*" pageEncoding="utf-8"%> 
    <% //得到结果集al 
    int pageCount=0; 
    ArrayList al=(ArrayList)request.getAttribute("al"); 
    //我的问题出在这里,在请求index.jsp时用到数据库中的数据ArrayList al (上边),这时al一定为空,于是下边请求控制器调用model处理,控制器把结果集放在request中forward到index.jsp,...问题是第一次请求index.jsp时al为空,无法运行了,抛出一个空指针的异常,下面的if判断就不执行了,我该怎么半? 
    if(al!=null){ 
    //得到pagecount 
    String s_pageCount=(String)request.getAttribute("pageCount"); pageCount=Integer.parseInt(s_pageCount); }else{ 
    request.getRequestDispatcher("ShowGoodsClServlet?flag=getGoodsPage&pageNow=1").forward(request,response); 
    } -----------------------------------------------------
    上边的代码(--之间)是在right.jsp中,而在index.jsp中 <jsp:include flush="true" page="right.jsp"></jsp:include>第一次请求index.jsp时,right.jsp中的al一定为空,于是做了一个if判断if(al!=null){ 
    //得到pagecount 
    String s_pageCount=(String)request.getAttribute("pageCount"); pageCount=Integer.parseInt(s_pageCount); }else{ 
    request.getRequestDispatcher("ShowGoodsClServlet?flag=getGoodsPage&pageNow=1").forward(request,response); 
    //response.sendRedirect("ShowGoodsClServlet?flag=getGoodsPage&pageNow=1");
    } 在控制器ShowGoodsClServlet中取得al并把它放在request中,重新跳转到index.jsp(这里是应该跳转到index.jsp还是right.jsp? 我暂用index.jsp)
    但是在right.sjp中的跳转并没有实现即request.getRequestDispatcher("ShowGoodsClServlet?flag=getGoodsPage&pageNow=1").forward(request,response); 
    al依然为空,?????