在Struts中实现分页的方法:
假如在数据库表中有:tb_Client_sfzy 表省份编号 省份名称 省份介绍
tb_Client_csxx 省份简称 省份名称 城市名称 邮编 电话区号
两者通过省份名称联系
先查询操作 代码如下:QuerySfzySelectAction
Integer iCount = Integer.valueOf("1");//初始化
request.setAttribute("iCount", String.valueOf(iCount));
request.setAttribute("total", String.valueOf(***facade.get***DAOInstance().toatl()));//***facade.get***DAOInstance().toatl()表示的是DAO 操作模式
request.setAttribute("sfzylist", ***facade.get***DAOInstance().sfzySelect()); //同上
return mapping.findForward("querySfzySelect");
其中toatl查询函数代码如下:
//显示多少条记录数
public int toatl() {
int iCount = 0; //定义一个iCount变量 取得总该表共有多少条记录
String sql = SQLCode.getSQLCode("sql.sfzy.total"); //利用动态SQL查询语句 可以任意的查询不同表中的记录数
ResultSet rs = null; //结果集初始化
try {
rs = connection.executeQuery(sql); //利用DBCon类进行编写
while (rs.next()) {
iCount = rs.getInt("t"); //取得当前该表的记录树
}
}
catch (SQLException ex) {
}
connection.close(); //关闭数据库连接
return iCount; //返回iCount
}
和sfzySelect()查询函数代码如下:
//显示头5条的记录数2008-7-23
public List sfzySelect() {
List list = new ArrayList(); //初始化List容器
FfzyForm form = null; //初始化省份FfzyForm类
String sql = SQLCode.getSQLCode("sql.sfzy.select"); //同上
try {
ResultSet rs = connection.executeQuery(sql);//同上
while (rs.next()) {
form = new FfzyForm();//同上
form.setSfzy_id(rs.getString(1));//同上
form.setSfzy_sfmc(rs.getString(2));
form.setSfzy_zyms(rs.getString(3));
list.add(form);//加载到List容器中
}
}
catch (SQLException ex) {
}
connection.close(); //同上
return list; //同上
}
接着处理JSP页面:
<%int maxPage=0; //定义总共的显示页数
List list=(List)request.getAttribute("sfzylist"); //显示头五条的sfzylist
int total=Integer.parseInt((String)request.getAttribute("total"));
int iCount=Integer.parseInt((String)request.getAttribute("iCount")); //显示当前第几页
maxPage=total;
if(maxPage%8==0){ //以每页为8条记录显示 判断是否为8的整数倍
maxPage=maxPage/8;
}else{
maxPage=maxPage/8+1;
}
%>
............
<td width="130" height="24">省份编号</td>
<td width="123">省份名称</td>
<td width="244">操作</td>
</tr>
<%for (int i=0;i<list.size();i++){
FfzyForm form =(FfzyForm)list.get(i);//这就不解析了吧
%>
................
<td height="24"><%=form.getSfzy_id()%></td>
<td><%=form.getSfzy_sfmc()%></td>
<td align="center">
<a href="querySfzySelectOne.do?id=<%=form.getSfzy_id()%>&iCount=<%=iCount%>">查看地理位置</a>
//querySfzySelectOne查看选中的每一条的省份 并查看地理位置记录 同过action处理
<a href="csxxSelect.do?province=<%=form.getSfzy_sfmc()%>&iCount=<%=iCount%>">查看具体城市</a></td>
//csxxSelect 是通过省份的province=<%=form.getSfzy_sfmc()%>来 查看当前省份的所有城市 同过action处理
</tr>
<%}%>
</table>
<p>
<%if(iCount<=1){%>
<%}else{%>
<a href="querySfzyFenYe.do?iCount=<%=iCount-1%>">上一页</a>
<%}%>
<%if(iCount>=maxPage){%>
<%}else{%>
<a href="querySfzyFenYe.do?iCount=<%=iCount+1%>">下一页</a>
<%}%>
</p>
<p>共<%=maxPage%>页 第<%=iCount%>页 </p>
<%if(iCount<=1){%> <%}else{%>
<p><a href="querySfzySelect.do">回到第一页</a> </p>
<%}%>
还有个大东西 呵呵~~~querySfzyFenYe 处理分页的action哦~~
用来显示上下页的
代码如下:
Integer iCount = Integer.valueOf(httpServletRequest.getParameter("iCount"));//取得提交的当前页数
Integer iCount1=new Integer( (iCount.intValue() - 1) * 8); //取得显示的到当前页面的记录 在数据库表中所占的位置
if (iCount1.intValue() > 0) {
List list=***facade.get***DAOInstance().sfzyFenYe(iCount1); //分页 的操作函数
httpServletRequest.setAttribute("iCount", String.valueOf(iCount));
httpServletRequest.setAttribute("total", String.valueOf(***facade.get***DAOInstance().toatl()));
httpServletRequest.setAttribute("sfzylist",list);
return actionMapping.findForward("fenyeSuccess");
}
else {
return actionMapping.findForward("fenyeFail");
}
//分页的操作
public List sfzyFenYe(Integer number) {
List list = new ArrayList();
FfzyForm form = null;
String sql = SQLCode.getSQLCode("sql.sfzy.fenye");
sql = connection.editSqlCode(sql, number);
try {
ResultSet rs = connection.executeQuery(sql);
while (rs.next()) {
form = new FfzyForm();
form.setSfzy_id(rs.getString(1));
form.setSfzy_sfmc(rs.getString(2));
form.setSfzy_zyms(rs.getString(3));
list.add(form); //取得显示下个页面的集合
}
}
catch (SQLException ex) {
}
conn.close();
return list;
}
ok 结束了 希望对大家有帮助 呵呵~~