我的jsp页面跳转到servlet上面,servlet对数据库进行一个整体查询得出一个二维数据,将这个数组显示在下一个jsp页面,这个jsp页面有一个查询筛选和翻页功能。现在问题出现了:我的查询筛选不能做到,选择第一个条件以后,后面是以第一个条为基础进行显示,我现在是,第一个条件选定以后,对后面还是没有任何影响,后面显示的任然是所有选项,如何做到,条件关联。
第二,比如我一共有100条记录,进行翻页是没有问题的,但是如果我使用查询,得到50条记录, 我在进行翻页,就会变成对100条记录进行翻页。也就是说我操作的还是最初数据,但是我想了很多办法,包括数组放在session等等,都没有解决。
希望给我提供思路。或代码实例

解决方案 »

  1.   

    你是不是选择的时候把页面给刷新了 使用ajax。。
      

  2.   


    正解在 选择第一个条件,再是第二个条件,要做到连动,   就用ajax,这也是ajax的经典应用,只需要在相关数据库表中做好外键就行了,至于查询,就用子查询就满足你的要求了,那就是SQL这一块了……
      

  3.   

    不知道我理解有没有错,你是不是说给了一个查询条件,查出第一页是根据给的条件查,查翻到下一页就条件没了,就是根据所有的查是吗?
    如果不是这问题下面的就不用看了,如果是这问题我一般是这样写的:
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");
    PrintWriter out = response.getWriter();

    Filminfo film = new Filminfo();

    // String tname = request.getParameter("name");
    // int type = new Integer(request.getParameter("type"));
    // String actor = request.getParameter("actor");
    // String director = request.getParameter("director");
    // String price1 = request.getParameter("price1");
    // String price2 = request.getParameter("price2");

    FilmInfoDao fdao = new FilmInfoDaoImpl();

    //每页显示数
    int pageSize = 3;
    request.setAttribute("pagesize",pageSize);
    //总记灵数
    int pageCount = fdao.findFilmCountPage();
    request.setAttribute("pagecount",pageCount);
    //总页数
    int pageAll = pageCount % pageSize == 0 ? pageCount / pageSize :pageCount / pageSize - 1;
    request.setAttribute("pageall",pageAll);
    //当前页
    int pageIndex = 0;
    //如果得到的值是个空,再对其进行.tostring()操作,就会报错!
    Object index = request.getParameter("pageindex");
    if(index != null){
    pageIndex = Integer.parseInt(index.toString());
    }
    if(pageIndex<1){
    pageIndex = 1;
    }else if(pageIndex>pageAll){
    pageIndex = pageAll;
    }
    request.setAttribute("pageindex",pageIndex);


    Filetype type = null;
    Double price2 = null;
    try {
    if(!request.getParameter("type").equals("--请选择--")){
    type = new Filetype();
    type.setTypeid(new Integer(request.getParameter("type")));
    }
    film.setFiletype(type);
    //设置电影名
    if(request.getParameter("name")!=null && request.getParameter("name")!=""){
    film.setFilename(request.getParameter("name"));
    }
    //设置电影类型
    if(request.getParameter("actor")!=null && request.getParameter("actor")!=""){
    film.setActor(request.getParameter("actor"));
    }
    if(request.getParameter("director")!=null && request.getParameter("director")!=""){
    film.setDirector(request.getParameter("director"));
    }
    if(request.getParameter("price1")!=null && request.getParameter("price1")!=""){
    film.setTicketprice(Double.parseDouble(request.getParameter("price1")));
    }
    if(request.getParameter("price2")!=null && request.getParameter("price2")!=""){
    price2 = Double.parseDouble(request.getParameter("price2"));
    }
    } catch (Exception e) {
    film = (Filminfo) request.getSession().getAttribute("film");
    price2 = (Double) request.getSession().getAttribute("price2");
    }
    List<Filminfo> list = null;

    request.getSession().setAttribute("film",film);
    request.getSession().setAttribute("price2",price2);

    if(fdao.findFilminfo(film, price2,pageIndex,pageSize) != null){
    list = fdao.findFilminfo(film, price2,pageIndex,pageSize);
    request.setAttribute("filmlist",list);
    }
    request.getRequestDispatcher("View.jsp").forward(request, response);

    out.flush();
    out.close();
    }
    如果是第一根据条件分页查询的话,就把sql语句条件值放到session中,第二次再进入这个servlet因为没有传from表单传值,request.getpara...时就会报错。说明这是点超链接翻页,就从session中取sql语句条件用来判断的值!
      

  4.   

    就是把页面传过来的值存session,并且在得页面传过来的值时我用try包起来了!
      

  5.   

    感觉上,道理上明白,为什么我的代码实现很困难,附上代码,请帮忙查看下,不胜感激
    jsp代码如下:
    <%@ page language="java" contentType="text/html; charset=UTF-8"      
        pageEncoding="UTF-8"  import="java.util.*,java.lang.*,java.lang.Iterable.*"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <%@include file="/toppage.jsp"%>
    <%@include file="./toptuji.jsp" %>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>图籍查询</title>
     
        <%
        String str=(String)request.getAttribute("tujijieguo"); //显示数组
        String s[]=str.split("@");
       
        %>
     <script type="text/javascript">        function reserveCheck(id)
         {   
            var ids = document.getElementsByName(id);   
            var len = ids.length;   
            if (len > 0) 
            {   
                 var i = 0;   
                 for (i = 0; i < len; i++) 
                 {   
                   if (ids[i].checked) 
                        ids[i].checked = false;   
                     else 
                         ids[i].checked = true;   
     
                 }   
             }   
         }
         function rx(id)
         {   
            var ids = document.getElementsByName(id);   
            var len = ids.length;   
            if (len > 0) 
            {   
                 var i = 0;   
                 for (i = 0; i < len; i++) 
                 {   
               
                        ids[i].checked = true;   
                 }   
             }   
         }
         function rq(id)
         {   
            var ids = document.getElementsByName(id);   
            var len = ids.length;   
            if (len > 0) 
            {   
                 var i = 0;   
                 for (i = 0; i < len; i++) 
                 {   
               
                        ids[i].checked = false;   
                 }   
             }   
         }
             
      </script>   
       <style>
    form {
        margin:0px;
        padding:0px;
    }
    </style>
       
    </head>
    <body>
    <form action="./Tuji?leibie=xiangxi&chaxun=chaxun" method="post" >
    <table width="740"  border="1" align="center" STYLE="table-layout: fixed"  class="selectDiv" >
    <tr>
        <td width="10%">图纸编号</td>
        <td width="10%">专业</td>
        <td width="15%">设计名称</td>
        <td width="10%">图号</td>
        <td width="20%">名称</td>
        <td width="10%">现存数</td>
        <td width="8%">存放位置</td>
        <td width="21%">操作</td>
      </tr> 
       <tr>
      <td><input type="text" name=bianhao value="编号"/></td>
    <%=s[0]%>
       <td><input type="submit" name=p value="查询"/><input type="submit" name=p value="重置"/></td>
    </tr>
    </table>
    </form>

    <form action="./Tuji?leibie=xiangxi&shu=<%=s[2]%>&chaxun=jiechubiao"  method="post" >
    <table width="740"  border="1" align="center" STYLE="table-layout: fixed" >
      <tr>
        <td width="10%">图纸编号</td>
        <td width="10%">专业</td>
        <td width="15%">设计名称</td>
        <td width="10%">图号</td>
        <td width="20%">名称</td>
        <td width="10%">套数</td>
        <td width="8%">现存数</td>
        <td width="17%">存放位置</td>
      </tr> 
    <tr>
    <td colspan="2"><input type="checkbox"  onclick="rx('ck')" >全选</td>
    <td colspan="2"><input type="checkbox"  onclick="rq('ck')" >取消</td>
    <td colspan="2"><input type="checkbox"  onclick="reserveCheck('ck')" >反选</td>
    </tr>
    <%=s[1]%>
    <tr><td colspan="4">请输入借出数量:<input type="text"  name="fxk1" value="1"/></td>
    <td ><input type="submit" value="提交" ></td>
    <td align="center">
    </tr></table></form><form action="./Tuji?leibie=tujichaxun&kkz=<%=s[4]%>"  method="post" ><table width="740"  border="1" align="center" STYLE="table-layout: fixed" >
    <tr><td><input type="submit" name=kkx value="首页" ></td>
    <td><input type="submit" name=kkx   value="尾页" ></td>
    <td><input type="submit"  name=kkx value="上一页" ></td>
    <td><input type="submit" name=kkx value="下一页" ></td>
    <td>当前第<input type="text" name=kkz value=<%=s[4]%> disabled="disabled" >页</td>
    <td>共<input type="text" value=<%=s[3]%>  disabled="disabled">页</td></tr>
    </table>
    </form>
    </body>
    </html>
      

  6.   

    servlet代码如下:
    if(leibie.equals("tujichaxun"))                                        //图籍查询界面,包括查询操作和首次结果显示
    {

    String sql="select * from tujizhubiao";
    String str[][]=connsqlserver.executeQuery(sql,strDBlogo);  //显示数组
     String str1[][]=new String[str[0].length][str.length];     //查询框

     
     for(int i=0; i<str[0].length;i++)                              //查询框赋值,将数组转向
        {
         for(int j=0;j<str.length;j++)
         {
       
         str1[i][j]=str[j][i];
         }
        }
      HashSet<String> set=new HashSet<String>();                 

        
      int z=0;
        String s1[][]=new String[str1.length][str1[0].length];
        String s="";

       
        
        
        for(int i=0;i<str1.length;i++)                              
    {
         z=0;
    for(int j=0;j<str1[0].length;j++)
    {
    set.add(str1[i][j]);                                  //通过循环 去掉重复项目
    }

    Iterator<String> inter =set.iterator();                      //定义对象并且赋值 

    while(inter.hasNext())
    {
     s =(String)inter.next();
     s1[i][z]=s;
     z++;
    }

    set.clear();
    }
      
        int a []={3,4,5,7,9,10};
        
        String s2="";
        String s3="";
        String s4="";
        String s15="";
       
             
       for(int i=0;i<a.length;i++)
       {
      
       if(request.getParameter("xz"+i)==null||request.getParameter("p").equals("重置"))      //查询框初值控制,查询留存
       s15="<option>请选择</option>";
       else
       s15="<option>"+request.getParameter("xz"+i)+"</option>";
      
       s2=s2+"<td><select  name=xz"+i+" style=width:100%    values="+a[i]+" >"+s15;
      
      
       for(int j=0;j<str1[0].length;j++)
       {
       if(s1[a[i]][j]!=null)
       {
       s3=s3+"<option >"+s1[a[i]][j]+"</option>";
       } 
      
       }
       s2=s2+s3+"</select></td>";
       s3="";
    }  
       s4=s2;
       String s5="";
       String s6="";
       String s7="";
      
       String[][] ss=(String[][])session.getAttribute("tuji");//显示值
       String zn[][];
       if(!(ss==null))                                         //替代算法,此处将传过来的数组和查出来的数组进行判断.一定条件下用哪个数组!
       {
       zn=new String[ss.length][ss[0].length];              //如果,session中未存数据,将使用主表中数据
       for(int i=0;i<ss.length;i++)
       {  
       for(int j=0;j<ss[0].length;j++)
       {
       zn[i][j]=ss[i][j];
       }   
       }
       }
       else
       {
       zn=new String[str.length][str[0].length];              //使用主表中数据处理
       for(int i=0;i<str.length;i++)
       {  
       for(int j=0;j<str[0].length;j++)
       {
       zn[i][j]=str[i][j];
       }   
       }
       }
      
        int q=0,b=0,k;
      
      
        if(zn.length%10==0)
        k=zn.length/10;
        else
        k=zn.length/10+1;
        


       if(request.getParameter("kkx")==null)                       //如果未触发
       {
       b=0;q=1*10;
       }
       else
       {
        

       if((request.getParameter("kkx").trim()).equals("首页"))
       {
       b=0;q=1*10;
       }
       else
       if((request.getParameter("kkx").trim()).equals("尾页"))
       {
       b=(k-1)*10;q=k*10;
       }
       else
       if(request.getParameter("kkx").trim().equals("下一页"))
       {
      
    b=Integer.parseInt(request.getParameter("kkz").trim())*10;
    q=(Integer.parseInt(request.getParameter("kkz").trim())+1)*10;    }
       else
       if((request.getParameter("kkx").trim()).equals("上一页"))
       {
      
    q=(Integer.parseInt(request.getParameter("kkz").trim())-1)*10;
    b=(Integer.parseInt(request.getParameter("kkz").trim())-2)*10;
    System.out.println(request.getParameter("kkz"));
       }

       }
      
    if(b>=0){
       for(int i=b;i<zn.length&&i<q;i++)                  //显示zn数组值,考虑,如果在查询结果中再次查询。
       {  
       for(int j=0;j<zn[0].length;j++)
    {
       if(!(j==0||j==2||j==6||j==10||j==11||j==12||j==13||j==14))
    {
      
       if(j==1)
       {
      

       s5=s5+"<td><input type=checkbox id=ck name=h"+i+" value="+zn[i][1]+"><input type=submit name=test3 value="+zn[i][j]+"></td>";
      

       }
       else
       {
       s6=s6+"<td align=left valign=middle >"+zn[i][j]+"</td>";
       }
      
         
    }

     
    }
    s7=s7+"<tr>"+s5+s6+"</tr>";
      s5="";
      s6="";
     
       }}

       q=q/10;
       b=b/10;
       System.out.println(b+"?");
       System.out.println(b<(-1));
       if(!(b<0||q>k))
       {
       s7=s4+"@"+s7+"@"+str.length+"@"+k+"@"+q;
       if(!(session.getAttribute("tuji")==null))
       session.removeAttribute("tuji");
      
       request.setAttribute("tujijieguo",s7);     
       request.getRequestDispatcher("mokuai/logo/xiangmu/tuji/tujichaxun.jsp?").forward(request,response); 
       }
       else
       writer.write("<center> <form action=/TCD/mokuai/logo/xiangmu/tuji/tujiguanli.jsp  method=post ><input name=submit type=submit value=以及达到最末页!></form> </center>");
      }
    else
    if(leibie.equals("xiangxi"))                                                       //图籍查询界面的查询操作
    {

    String chaxun=(String)request.getParameter("chaxun");
    String bianhao=(String)request.getParameter("test3");
    if(bianhao!=null)                                                                    
    {
    String sql="select * from tujizhubiao  where xvhao in('"+bianhao+"')";

    String str[][]=connsqlserver.executeQuery(sql,strDBlogo);
            request.setAttribute("jilu",str );     
            request.getRequestDispatcher("/mokuai/logo/xiangmu/tuji/xiangxixinxi.jsp").forward(request,response);
    }
    else
    if(chaxun.equals("chaxun"))
    {
    String str[]=new String[7];
    str[0]=(String)request.getParameter("bianhao");
    str[1]=(String)request.getParameter("xz0");
    str[2]=(String)request.getParameter("xz1");
    str[3]=(String)request.getParameter("xz2");
    str[4]=(String)request.getParameter("xz3");
    str[5]=(String)request.getParameter("xz4");
    str[6]=(String)request.getParameter("xz5");


    String sx0="select * from tujizhubiao  where 1=1  ";

    try
    {
    Integer.parseInt(str[0]);
    str[0]="and xvhao='"+str[0]+"'";

    }
    catch(Exception e)
    {
    str[0]="";
    }

    if(str[1].equals("请选择"))
    {
    str[1]="";
    }
    else
    {
    str[1]="and zhanye='"+str[1]+"'";
    }
    if(str[2].equals("请选择"))
    {
    str[2]="";
    }
    else
    {
    str[2]="and shejimingc='"+str[2]+"'";
    }
    if(str[3].equals("请选择"))
    {
    str[3]="";
    }
    else
    {
    str[3]="and tuhao='"+str[3]+"'";
    }
    if(str[4].equals("请选择"))
    {
    str[4]="";
    }
    else
    {
    str[4]="and mingcheng='"+str[4]+"'";
    }
    if(str[5].equals("请选择"))
    {
    str[5]="";
    }
    else
    {
    str[5]="and xiancun='"+str[5]+"'";
    }
    if(str[6].equals("请选择"))
    {
    str[6]="";
    }
    else
    {
    str[6]="and cunfangweizhi='"+str[6]+"'";
    }

    String sql=sx0+str[0]+str[1]+str[2]+str[3]+str[4]+str[5]+str[6];
    String str1[][]=connsqlserver.executeQuery(sql,strDBlogo);
    session.setAttribute("tuji",str1);                              //将查询结果添加到serrion中,取出方式为:String ss[][]=(String[][])session.getAttribute("tuji");
    //System.out.println(request.getContextPath());获取路径
    request.getRequestDispatcher("/mokuai/logo/xiangmu/tuji/tempsaixuan.jsp").forward(request,response);   
    }
      

  7.   

    可以用hibernate实现分页,这样容易一些,不用考虑request和session.
      

  8.   

    其实用hibernate还是会有这个问题,因为点击下一页后是从超链超过去的,所以没有从JSP页面传过来的条件!