Topic: 自己写的翻页操作,SQL Server2000+struts,欢迎斧正

  Print this page

1.自己写的翻页操作,SQL Server2000+struts,欢迎斧正 Copy to clipboard
Posted by: haibo
Posted on: 2003-12-03 11:36

主要是应用了Logic:iterator 标签的功能,支持编辑后记忆页数功能
原理是:一次取100条记录,逻辑页为10,
public ActionForward list(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse httpServletResponse) throws
Exception{
DataSource ds=getDataSource(request);
Connection con=null;
RowSetDynaClass rsdc;
HttpSession session=request.getSession();

try{
con=ds.getConnection();
//因为所有的叶子翻页具有共通性,只是执行的语句不一样
//所以翻页操作放在基类中

//所有默认的list操作,无参数的均为 预处理--> 到达当前页
if(request.getParameter("changePage")!=null){
//明显的翻页处理:page 所要到达页
int page=Integer.parseInt(request.getParameter("page"));
System.out.println("明显的反页操作到达:"+page);
goPage(request,con,page);
// return mapping.findForward("list");
return getListForward(mapping,request);

}
//不是翻页操作,第一次,增加,删除,修改后又回到列表状态
//我们要保持视图为当前的状态
if(prePage(con,request,mapping)){
//有数据返回
//其它的操作全部将逻辑页设为0迫使取记录
//这样使得及时更新Bean中的数据
session.setAttribute("logicpage",String.valueOf(0));
//在此区分到底是第一次翻页操作还是,编辑后的返回列表操作
if(request.getParameter("listFirst")!=null){
session.setAttribute("currentpage",String.valueOf(1));
}
int page=Integer.parseInt((String)session.getAttribute("currentpage"));
goPage(request,con,page);
}else{
//无记录我们可 假设为单前页为1,以便于添加操作
session.setAttribute("currentpage",String.valueOf(1));
}

//在查询的时候顺便计算一下一些数的汇总
if(session.getAttribute("listAction")!="列表全部"){
commonCac(con,request);
}

}catch(Exception e){
e.printStackTrace();
throw new Exception("Erorr in Listing heton");
}
finally{
try{
con.close();
}catch(SQLException sqle){
sqle.printStackTrace();
throw new Exception("Error to Closing the Conn");
}
}

return getListForward(mapping,request);

}

///////////////////////////////////////////////////////
public boolean prePage(Connection con, HttpServletRequest request,ActionMapping mapping)throws SQLException{
//分页预处理 取数据 ,并初始化域值(totalpage,totalrec)
//不从数据库中取出100条记录作初始值设logicpage=10
//具体到哪已页并 不关心
//如果没有记录则返回假
HttpSession session=request.getSession();
int logicpage=0; int totalrec=0;
java.util.Collection List =null;
///每个用户只有一个翻页操作在进行,这样假定可以减少内存的使用
System.out.println("初始化列表操作:列表全部");
List =pageList(con,0,request); //列出所有符合条件的记录
totalrec = List.size();
if(totalrec==0){
//如果没有记录则直接终止list,并 置List为空
session.setAttribute("List",null);
return false;
}
int totalpage=0;
if(totalrec<10) totalpage=1;
else if(totalrec%10==0)totalpage=totalrec/10;
else if(totalrec/10>0)totalpage=totalrec/10+1;
//为了使翻页具有追踪功能,该为全放在session中
session.setAttribute("totalrec", String.valueOf(totalrec));
session.setAttribute("totalpage", String.valueOf(totalpage));
/* //次取出100条纪录
System.out.println("初始化列表操作:列表前100");
List =pageList(con,100,request);
//设定逻辑页数(目前已经取出的记录组成的有效页
if(totalrec>100)
logicpage=10;
else
logicpage=totalpage;
session.setAttribute("logicpage",String.valueOf(logicpage));
//将以前的list域置为null,释放内存空间
session.setAttribute("List",null);
session.setAttribute("List", List); //设置记录集*/
return true;
}
//////////////////////////////////////////////////////////////////
public void goPage(HttpServletRequest request,Connection con,int page)throws SQLException{
//到指定页,假设已作过预处理
HttpSession session=request.getSession();
java.util.Collection List=null;

//是否是违法访问超后的叶子
if (page
> Integer.parseInt((String)session.getAttribute("totalpage")))
{
//如果是违法访问超后的叶子,就设为最后一页
System.out.println("违法访问超后的叶子");
//如果当前逻辑页未包含最后页,则取出更多的纪录
if(Integer.parseInt((String)session.getAttribute("logicpage"))<Integer.parseInt((String)session.getAttribute("totalpage")))
{ //取出更多纪录,并置当前页为最后一页
System.out.println("取出更多纪录,并置当前页为最后一页");
page=Integer.parseInt((String)session.getAttribute("totalpage"));
List=pageList(con,(page / 10 + 1) * 100,request);
//设置逻辑页数
session.setAttribute("logicpage",String.valueOf((page/10+1)*10));
System.out.println("//////need more record ,logic page is:"+session.getAttribute("logicpage"));
//重新设置纪录集
session.setAttribute("List",null);
session.setAttribute("List", List); //重新设置记录集
session.setAttribute("begin", String.valueOf(page*10-10)); //从这条记录开始
System.out.println("beigins from :"+session.getAttribute("begin"));

session.setAttribute("currentpage",session.getAttribute("totalpage")); //设为最小页
return ;
}
session.setAttribute("begin"
, String.valueOf(Integer.parseInt((String)session.getAttribute("totalpage")) * 10-10));
System.out.println("//////////////////////////////////over back access+starting"+session.getAttribute("begin"));
// request.setAttribute("end", request.getParameter("totalrec"));
session.setAttribute("currentpage", session.getAttribute("totalpage")); //设为最大页
return ;
}
//是否是违法访问超前的叶子
if (page < 1)
{
System.out.println("/////////////////////////over pre access");
session.setAttribute("begin", "0");
session.setAttribute("currentpage", String.valueOf(1)); //设为最小页
return ;
}
//需要取出更多的纪录
if ( page
> Integer.parseInt((String)session.getAttribute("logicpage")))
{
System.out.println("//////////////////////需要更多纪录,request page is:"+request.getParameter("page"));
// printCheckBo bo = new //();
//java.util.Collection printCheckList = bo.list( (page / 10 + 1) * 100); //需要这么多纪录
List=pageList(con,(page / 10 + 1) * 100,request);
System.out.println("列出:"+(page/10+1)*100);
//设置逻辑页数
session.setAttribute("logicpage",String.valueOf((page/10+1)*10));
System.out.println("//////need more record ,logic page is:"+session.getAttribute("logicpage"));
//重新设置纪录集
session.setAttribute("List",null);
session.setAttribute("List", List); //重新设置记录集
session.setAttribute("begin", String.valueOf((page-1)*10 )); //从这条记录开始
System.out.println("取药取出更多记录从"+session.getAttribute("begin"));
//忽略end超出总纪录数的情况
// request.setAttribute("end", String.valueOf(page / 10 * 100 + 10)); //从这条记录截止
session.setAttribute("currentpage", String.valueOf(page)); //设为最小页
return ;
}
//正常区间内的叶子访问
System.out.println("正常叶子访问:");
session.setAttribute("currentpage", String.valueOf(page));
System.out.println("/////////////////////good access now current page is:"+(String)session.getAttribute("currentpage"));
session.setAttribute("begin", String.valueOf((page-1)*10)); //从这条记录开始,在logic:iterator 标签中应用
System.out.println("begin:"+String.valueOf((page-1)*10));
return;

}
/////////////////////////////////////////////
public Collection pageList(Connection con, int row,HttpServletRequest request) throws SQLException{
String sql=getListSQL(request,row);
System.out.println("list SQL is "+sql);
/*
if(row!=0){
System.out.println("rwo 不等于0");
//解析字符串
sql="select top "+row+sql.substring(10);
System.out.println("替换后:"+sql);
}*/
PreparedStatement ps=con.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
RowSetDynaClass rsdc=new RowSetDynaClass(rs);
System.out.println("list action is oK.");
return rsdc.getRows();

}


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923