1. 程式人生 > >Struts2實現分頁

Struts2實現分頁

 

Action層

package action;


public class indexAction extends ActionSupport {
		private int pageAllNum;
		private int beginIndex;
		private List<App_User> list;

		
		public int getBeginIndex() {
			return beginIndex;
		}
		public void setBeginIndex(int beginIndex) {
			this.beginIndex = beginIndex;
		}
		public int getPageAllNum() {
			return pageAllNum;
		}
		public void setPageAllNum(int pageAllNum) {
			this.pageAllNum = pageAllNum;
		}
       	public List<App_User> getList() {
			return list;
		}
		public void setList(List<App_User> list) {
			this.list = list;
		}

		@Override
		public String execute() throws Exception {
			// TODO Auto-generated method stub
			 UserDao userdao=new UserDaoImpl();
			 pageAllNum=userdao.countPages(10);//頁大小為10
			 if(beginIndex==0)//初始化
				 beginIndex=1;
			 if(pageAllNum==0)//初始化
				 pageAllNum=1;
			 list=userdao.displayUser(beginIndex,10);//頁大小為10
						 
			 return SUCCESS;
		}
}

dao介面層

package dao;
import java.util.List;

import model.App_User;

public interface UserDao {
  public List<App_User> displayUser(int pagenum,int pagesize);
  public int  countPages(int pagesize);
  
}

daoImpl層

<連結的資料庫是sqlserver 由於不支援limit關鍵字 用的top所以sql語句有點長---mysql支援limit 分頁查詢的sql語句簡單>

package daoImpl;

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

import util.DBUtil;
import dao.UserDao;
import model.App_Dep;
import model.App_User;

public class UserDaoImpl implements UserDao {

	@Override
	public List<App_User> displayUser(int pagenum, int pagesize) {
		// TODO Auto-generated method stub
		Connection con=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		List<App_User> list=new ArrayList<App_User>();
		try{
			con=DBUtil.openConnection();
//查詢語句可以忽略
			String sql="select top(?) App_User.pkid,uname,uage,depname,ucode from App_User inner join App_Dep on App_User.depcode=App_Dep.depcode where App_User.pkid not in (select top (?) App_User.pkid from App_User inner join App_Dep on App_User.depcode=App_Dep.depcode)";
			stmt=con.prepareStatement(sql);
			stmt.setInt(1,pagesize);
			stmt.setInt(2, (pagenum-1)*pagesize);
			rs=stmt.executeQuery();
		while(rs.next()){
			App_User user=new App_User();
			user.setUname(rs.getString("uname"));
			user.setUage(rs.getInt("uage"));
			user.setDepname(rs.getString("depname"));
			user.setUcode(rs.getString("ucode"));
			list.add(user);
		}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	    try {
			DBUtil.closeResultSet(rs);
			DBUtil.closeStatement(stmt);
			DBUtil.closeConnection(con);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    
		
		return list;
	}

	@Override
	public int countPages(int pagesize) {
		// TODO Auto-generated method stub
		Connection con=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		int  pagenum = 0;
		try{
			con=DBUtil.openConnection();
			String sql="select count(*) from App_User";
			stmt=con.prepareStatement(sql);
			rs=stmt.executeQuery();
		if(rs.next()){
			if(rs.getInt(1)%pagesize==0)
				pagenum=rs.getInt(1)/pagesize;
			else
				pagenum=rs.getInt(1)/pagesize+1;
		}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	    try {
			DBUtil.closeResultSet(rs);
			DBUtil.closeStatement(stmt);
			DBUtil.closeConnection(con);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return pagenum;
	}


		
}

 

前端.jsp

<!--分頁開始-->	
<center>					
<s:if test="beginIndex==1">
上一頁
</s:if><s:else>
<a  href="indexAction?beginIndex=<s:property value="beginIndex-1"/>">上一頁 </a>
</s:else>				

<s:if test="beginIndex==pageAllNum">下一頁 
</s:if><s:else>
<a href="indexAction?beginIndex=<s:property value="beginIndex+1"/>" >下一頁   </a>
</s:else>		

第<s:property value="beginIndex"/>頁/共<s:property value="pageAllNum"/>頁									
</center>
<!--分頁結束-->