Struts实现分页显示数据

//操作的数据库中的表名为:UserInfo,有三个属性:userId,userName,userPassword(顾名思义)


首先为UserInfo表构造一个相对应的JavaBean,UserInfo.java(因为要贴的代码过多,这个就省略了)。

 现在正式开始:新建名为:LendDao.java 的java类,其中有两个方法,一个是用来获得,分页后,每一页应该显示的内容( selectLend(int *,  int *) );另一个是查询数据表中共有多少条数据,用来确定要分多少页的( selectLendSize() )。

package com.zhou.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.zhou.util.DButil;
import com.zhou.vo.UserInfo;

public class LendDao {
		Connection conn = DButil.getConn();
		public List<UserInfo> selectLend(int pageNow, int pageSize){
			List<UserInfo> list = new ArrayList<UserInfo>();
			try {
				PreparedStatement pst = conn.prepareStatement("select top "+pageSize+" userId,userName,userPassword from UserInfo where userId not in(select top "+(pageSize*(pageNow-1))+" userId from UserInfo)");
				ResultSet rs = pst.executeQuery();
				while(rs.next()){
					UserInfo us = new UserInfo();
					us.setUserId(rs.getInt("userId"));
					us.setUserName(rs.getString("userName"));
					us.setUserPassword(rs.getString("userPassword"));
					list.add(us);
				}
				return list;
				
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}finally{
				DButil.CloseConn();
			}
		}
		
		public int selectLendSize(){
			try {
				Connection conn = DButil.getConn();
				PreparedStatement pst = conn.prepareStatement("select count(*) from userInfo");
				ResultSet rs = pst.executeQuery();
				if(rs.next()){
					int pagecount = rs.getInt(1);
					return pagecount;
				}
				return 0;
				
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return 0;
			}finally{
				DButil.CloseConn();
			}
			
		}
}

来解释下两个方法里的sql语句:

"select top "+pageSize+"userId,userName,userPassword from UserInfo where userId not in(select top "+(pageSize*(pageNow-1))+"userId from UserInfo)"

第一个要注意的地方就是 pageSize 和 (pageSize*(pageNow-1)) 都是方法传过来的参数值,所以要注意不能直接写在sql语句的“”中,在sql中能够识别的是传过来的数字0,1,....等。第二个特别要注意的地方就是 top后面一定要接空格,否则就会把top1userId看成一个列属性,可以去看下sql语句中和top有关语句的用法。

"select count(*) from userInfo"

这句相对来说就简单多了,就是一个count(*):统计元组个数函数,通俗点说就是算下,表中有多少行数据。

然后就是实现分页功能的Pager.java:

package com.zhou.tool;

public class Pager {
		private int pageNow;      //当前页
		private int pageSize=4;   //每页显示多少条记录
		private int totalPage;	  //共有多少页
		private int totalSize;		//共有多少条记录
		private boolean hasFirst;	//是否有首页
		private boolean hasPre;		//是否有前一页
		private boolean hasNext;	//是否有下一页
		private boolean hasLast;	//是否有最后一页
		
		public Pager(int pageNow, int totalSize){
			this.pageNow = pageNow;
			this.totalSize = totalSize;
		}

		public int getPageNow() {
			return pageNow;
		}

		public void setPageNow(int pageNow) {
			this.pageNow = pageNow;
		}

		public int getPageSize() {
			return pageSize;
		}

		public void setPageSize(int pageSize) {
			this.pageSize = pageSize;
		}

		public int getTotalPage() {
			totalPage = getTotalSize()/getPageSize();
			if(totalSize%pageSize!=0)
				totalPage++;
			return totalPage;
		}

		public void setTotalPage(int totalPage) {
			this.totalPage = totalPage;
		}

		public int getTotalSize() {
			return totalSize;
		}

		public void setTotalSize(int totalSize) {
			this.totalSize = totalSize;
		}

		public boolean isHasFirst() {
			if(pageNow==1)
				return false;
			else return true;
		}

		public void setHasFirst(boolean hasFirst) {
			this.hasFirst = hasFirst;
		}

		public boolean isHasPre() {
			if(pageNow==1)
				return false;
			else return true;
		}

		public void setHasPre(boolean hasPre) {
			this.hasPre = hasPre;
		}

		public boolean isHasNext() {
			if(pageNow==this.getTotalPage())
				return false;
			else return true;
		}

		public void setHasNext(boolean hasNext) {
			this.hasNext = hasNext;
		}

		public boolean isHasLast() {
			if(pageNow==this.getTotalPage())
				return false;
			else return true;
		}

		public void setHasLast(boolean hasLast) {
			this.hasLast = hasLast;
		}
		
		
}


接下来写调用dao的Action,新建名为:LendAction.java的java类:

package com.zhou.action;

import java.util.List;
import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.zhou.dao.LendDao;
import com.zhou.form.Pager;

public class LendAction extends ActionSupport{
		private int pageNow=1;           //初始页为第一页
		private int pageSize=4;			 //每页数据为4条,可调节
		
		public String execute() throws Exception{
			LendDao dao = new LendDao();
			List list = dao.selectLend(pageNow, pageSize);
			Pager page = new Pager(pageNow, dao.selectLendSize());
			
			Map session = ActionContext.getContext().getSession();
			session.put("userinfo", list);
			session.put("pageinfo", page);
			return SUCCESS;
			
		}

		public int getPageNow() {
			return pageNow;
		}

		public void setPageNow(int pageNow) {
			this.pageNow = pageNow;
		}

		public int getPageSize() {
			return pageSize;
		}

		public void setPageSize(int pageSize) {
			this.pageSize = pageSize;
		}
		
}
这个主要是把要保存的信息存到session中,表数据key:userinfo,页码:pageinfo。

配置Struts.xml,加页面显示了:

<package name="Lendfront" extends="struts-default">
<action name="lendaction" class="com.zhou.action.LendAction">
<result name="success">/lendresult.jsp</result>
</action>
</package>

这里就说明下,配置的Action名为:lendaction,等下页面显示中要用到:

lendresult.jsp代码(body中关键代码):记得在页面开头加上Struts header:<%@taglib prefix="s" uri="/struts-tags" %>

<body>
    <table border="1" width="599">
    	<tr>
    		<td valign="top"><jsp:include page="lenduserinfo.jsp"></jsp:include></td>
    	</tr>
    
    	<tr bgcolor="#E9EDF5" class="font1">
    		<td align="right">
    			<s:set name="page" value="#session.pageinfo"/>
    			<a href="lendaction?pageNow=1">首页</a>
    			
    			<s:if test="#page.hasPre">
    				<a href="lendaction?pageNow=<s:property value="#page.pageNow-1"/>">上一页</a>
    			</s:if>
    			<s:else>
    				<a href="lendaction?pageNow=1">上一页</a>
    			</s:else>
    			
    			<s:if test="#page.hasNext">
    				<a href="lendaction?pageNow=<s:property value="#page.pageNow+1"/>">下一页</a>
    			</s:if>
    			<s:else>
    				<a href="lendaction?pageNow=<s:property value="#page.totalPage"/>">下一页</a>
    			</s:else>
    			
    			<a href="lendaction?pageNow=<s:property value="#page.totalPage"/>">尾页</a>
    		</td>
    	</tr>
    </table>
  </body>

<jsp:include page="lenduserinfo.jsp"></jsp:include>:这句插入的页面就是用来显示数据库UserInfo表中内容的

lenduserinfo.jsp中代码(同样只包含body,记得加上Struts header):

<body>
    <table border="2">
    	<tr>
    		<td>userId</td>   <td>userName</td>		<td>userPassword</td>
    	</tr>
	   	<s:iterator value="#session.userinfo" id="lend">
		   	<tr>
		   		<td><s:property value="#lend.userId" /></td>
		   		<td><s:property value="#lend.userName" /></td>
		   		<td><s:property value="#lend.userPassword" /></td>
		   	</tr>
	   	</s:iterator>
    </table>
  </body>

呼,好长的一篇啊

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值