我的jsp页面跳转到servlet上面,servlet对数据库进行一个整体查询得出一个二维数据,将这个数组显示在下一个jsp页面,这个jsp页面有一个查询筛选和翻页功能。现在问题出现了:我的查询筛选不能做到,选择第一个条件以后,后面是以第一个条为基础进行显示,我现在是,第一个条件选定以后,对后面还是没有任何影响,后面显示的任然是所有选项,如何做到,条件关联。
第二,比如我一共有100条记录,进行翻页是没有问题的,但是如果我使用查询,得到50条记录, 我在进行翻页,就会变成对100条记录进行翻页。也就是说我操作的还是最初数据,但是我想了很多办法,包括数组放在session等等,都没有解决。
希望给我提供思路。或代码实例
第二,比如我一共有100条记录,进行翻页是没有问题的,但是如果我使用查询,得到50条记录, 我在进行翻页,就会变成对100条记录进行翻页。也就是说我操作的还是最初数据,但是我想了很多办法,包括数组放在session等等,都没有解决。
希望给我提供思路。或代码实例
正解在 选择第一个条件,再是第二个条件,要做到连动, 就用ajax,这也是ajax的经典应用,只需要在相关数据库表中做好外键就行了,至于查询,就用子查询就满足你的要求了,那就是SQL这一块了……
如果不是这问题下面的就不用看了,如果是这问题我一般是这样写的:
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语句条件用来判断的值!
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>
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);
}