ext分頁

開始的時候只是聽說過ext,也不知道他是個怎樣的東東.
現在用了,發現在這玩意確實很強大.在項目中用他做了個分頁,挺好用.
帖出來代碼共享一下.
1.頁面要用到ext框架,必須先導入兩個js文件和它自帶的樣式文件:

Js代碼 複製代碼
  1. <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />      
  2. <script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>      
  3. <script type="text/javascript" src="ext/ext-all.js"></script>    
有了這三個以後就可以直接用了.
我用的是sqlserver數據庫,分頁可能和別的數據庫的分頁有差別.
先說說頁面部分的.
2. Ext.onReady(function(){}這樣就相當於在頁面上寫了個段javascript然後在<body>中onload調用的一樣.
首先要得到一個JsonStore對象: 
Js代碼 複製代碼
  1. var store=new Ext.data.JsonStore({      
  2.                 url:"managerSystemUser.do",      
  3.                 root:"data",      
  4.                 fields:["userId","userName","userPhone","userMail","mobilePhone","userAddress"],      
  5.                 totalProperty:"totalProperty"     
  6.             });    
 這裏的參數url設置的就是你查詢數據的action,root是和totalProperty這兩個參數都是和action裏的參數對應的,action裏寫的是什麼這裏就必須是.還有一個參數就是fields了,這個地方的參數都是和action裏輸出的那些參數對應的.
3.然後就是在頁面上設置列了,得要一個ColumnModel對象. 
Js代碼 複製代碼
  1. var cm=new Ext.grid.ColumnModel([check,{   
  2.                 header:"用戶ID",   
  3.                 dataIndex:"userId",   
  4.                 sortable: true,   
  5.                 type:"int"  
  6.             },{   
  7.                 header:"用戶名",   
  8.                 dataIndex:"userName",   
  9.                 sortable: true  
  10.             },{   
  11.                 header:"用戶電話",   
  12.                 dataIndex:"userPhone"  
  13.             },{   
  14.                 header:"用戶郵箱",   
  15.                 dataIndex:"userMail",   
  16.                 width:150   
  17.             },{   
  18.                 header:"用戶手機",   
  19.                 dataIndex:"mobilePhone",   
  20.                 width:150   
  21.             },{   
  22.                 header:"用戶地址",   
  23.                 dataIndex:"userAddress",   
  24.                 width:200   
  25.             }]);  
 這裏的參數header是設置列顯示的是什麼,如果不設置默認的就是和dataIndex一樣的,這裏的dataIndex是和上邊步驟2中的fields中的參數是相對應的,sortable是來設置是否可以在頁面上排序功能,哪個裏設置了true哪個就可以排序,type是來說明這一列是整數,要按整數的方法排序,如果不設置這個的話,他默認的會用字符串方式排序.
4.用了列以後就得有個地方來顯示了,當然就少了不GridPanel.
Java代碼 複製代碼
  1. var grid=new Ext.grid.GridPanel({   
  2.                 title:":::管理員信息維護:::",   
  3.                 cm:cm,   
  4.                 sm:check,   
  5.                 store:store,   
  6.                 autoWidth:true,   
  7.                 height:400,   
  8.                 bbar:bbar   
  9.             });   
var grid=new Ext.grid.GridPanel({
    			title:":::管理員信息維護:::",
    			cm:cm,
    			sm:check,
    			store:store,
    			autoWidth:true,
    			height:400,
    			bbar:bbar
    		}); 
  這裏的title網格標題顯示的內容,cm參數就是設置ColumnModel對象.sm那裏是我加了個複選框,
Js代碼 複製代碼
  1. var check=new Ext.grid.CheckboxSelectionModel({singleSelect :true});   
 這樣就得到複選框了,設置的singleSelect:true表示只能讓其每次選擇一個,不讓多選.還有上邊的第三步裏
Js代碼 複製代碼
  1. ([check,{   
  2.                 header:"用戶ID",   
  3.                 dataIndex:"userId",   
  4.                 sortable: true,   
  5.                 type:"int"  
 這裏也有個複選框.這就是說者一列的前邊都會加上一個複選框.
現在就繼續說GridPanel裏參數,store設置的就是第二步裏得到的那個store,autoWidth:true就是設置他的寬度爲自動擴展,height:400設置的是他的高爲400px,bbar設置的是分頁工具欄.
Js代碼 複製代碼
  1. var bbar=new Ext.PagingToolbar({   
  2.                 pageSize:15,   
  3.                 store:store,   
  4.                 beforePageText:"當前第",   
  5.                 afterPageText:"頁,共{0}頁",   
  6.                 lastText:"尾頁",   
  7.                 nextText :"下一頁",   
  8.                 prevText :"上一頁",   
  9.                 firstText :"首頁",   
  10.                 refreshText:"刷新頁面",   
  11.                 displayInfo: true,   
  12.                 displayMsg:"當前顯示 {0} - {1}條, 共 {2}   
  13.             });  
 這段代碼就是分頁工具欄,pageSize設置的頁面顯示多少頁,store設置的數據從哪來.下邊的都有中文就不一一解釋了.
4.現在數據也有了,網格也有了,分頁工具欄也有了,列也有了,是不是還差個顯示窗口呢.
Js代碼 複製代碼
  1. var win=new Ext.Window({   
  2.                 closable:false,   
  3.                 width:920,   
  4.                 height:450,   
  5.                 items:grid,   
  6.                 maximizable:true  
  7.                 }).show();  
 這樣就有了顯示的窗口了,closable設置的是這個窗口沒有關閉按鈕,就是不能讓用戶關閉這個窗口,items設置的是要顯示的網格,這個應該是可以設置多個的,但是我這裏只用一個就夠了,maximizable設置的是窗口可以有最大化按鈕.
5.還有很重要的一步,就是要加載數據庫:store.load();

現在頁面的基本上就完成了,現在就剩下類中的處理了.

1.在action中首先得到PrintWriter out = response.getWriter();輸出對象,
Java代碼 複製代碼
  1. int starts = new Integer(request.getParameter("start") == null ? "0"  
  2.                 : request.getParameter("start"));   
  3. int limit = 15;  
int starts = new Integer(request.getParameter("start") == null ? "0"
				: request.getParameter("start"));
int limit = 15;
 設置取前15條,和獲取頁面請求的參數獲取哪些.
2.執行數據庫的方法:
Java代碼 複製代碼
  1. public List getSysUser(int start,int limit) throws SQLException{   
  2.         String sql = "select  top "+limit+" 用戶id, 用戶名稱, 用戶密碼, 用戶電話, 用戶郵箱, " +   
  3.                 " 用戶手機,用戶地址 from 用戶信息 where 用戶id not in" +   
  4.                 " (select top "+start+" 用戶id from 用戶信息 order by 用戶id desc ) order by 用戶id desc";   
  5.         Connection conn =null;   
  6.         ResultSet rs = null;   
  7.         List<SystemUserVo> list = null;   
  8.         log.fine( "[query(sqlLabel)] sql : " + sql );   
  9.         try {   
  10.             conn = DbTool.getDs().getConnection();   
  11.             PreparedStatement pstm = conn.prepareStatement(sql);   
  12.             //pstm.setInt(1,start);   
  13.             //pstm.setInt(2,limit);   
  14.             rs = pstm.executeQuery();   
  15.         } catch (SQLException e) {   
  16.             e.printStackTrace();   
  17.         }   
  18.         if(null!=rs){   
  19.             list = new ArrayList<SystemUserVo>();   
  20.             while(rs.next()){   
  21.                 SystemUserVo user = new SystemUserVo();   
  22.                 user.setUserId(rs.getString(1));   
  23.                 user.setUserName(rs.getString(2));   
  24.                 user.setUserPhone(rs.getString(4));   
  25.                 user.setUserEmail(rs.getString(5));   
  26.                 user.setMobilePhone(rs.getString(6));   
  27.                 user.setUserAddress(rs.getString(7));   
  28.                 list.add(user);   
  29.             }   
  30.         }   
  31.         if(conn!=null){   
  32.             conn.close();   
  33.         }   
  34.         return list;   
  35.            
  36.            
  37.     }  
public List getSysUser(int start,int limit) throws SQLException{
		String sql = "select  top "+limit+" 用戶id, 用戶名稱, 用戶密碼, 用戶電話, 用戶郵箱, " +
				" 用戶手機,用戶地址 from 用戶信息 where 用戶id not in" +
				" (select top "+start+" 用戶id from 用戶信息 order by 用戶id desc ) order by 用戶id desc";
		Connection conn =null;
		ResultSet rs = null;
		List<SystemUserVo> list = null;
		log.fine( "[query(sqlLabel)] sql : " + sql );
		try {
			conn = DbTool.getDs().getConnection();
			PreparedStatement pstm = conn.prepareStatement(sql);
			//pstm.setInt(1,start);
			//pstm.setInt(2,limit);
			rs = pstm.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if(null!=rs){
			list = new ArrayList<SystemUserVo>();
			while(rs.next()){
				SystemUserVo user = new SystemUserVo();
				user.setUserId(rs.getString(1));
				user.setUserName(rs.getString(2));
				user.setUserPhone(rs.getString(4));
				user.setUserEmail(rs.getString(5));
				user.setMobilePhone(rs.getString(6));
				user.setUserAddress(rs.getString(7));
				list.add(user);
			}
		}
		if(conn!=null){
			conn.close();
		}
		return list;
		
		
	}
 3.再回到action當中,得到數據庫的總條數
int count=0;
在dao中的方法:
Java代碼 複製代碼
  1. public int getSysUserCount(){   
  2.         String sql="select count(*) count from 用戶信息";   
  3.         Connection conn =null;   
  4.         ResultSet rs = null;   
  5.         int count=0;   
  6.         try {   
  7.             conn = DbTool.getDs().getConnection();   
  8.             PreparedStatement pstm = conn.prepareStatement(sql);   
  9.             rs = pstm.executeQuery();   
  10.             if(rs.next()){   
  11.                 count=rs.getInt(1);   
  12.             }   
  13.         } catch (SQLException e) {   
  14.             e.printStackTrace();   
  15.         }   
  16.         try {   
  17.             if(conn!=null){   
  18.                 conn.close();   
  19.             }   
  20.         } catch (SQLException e) {   
  21.             e.printStackTrace();   
  22.         }   
  23.            
  24.         return count;   
  25.            
  26.     }  
public int getSysUserCount(){
		String sql="select count(*) count from 用戶信息";
		Connection conn =null;
		ResultSet rs = null;
		int count=0;
		try {
			conn = DbTool.getDs().getConnection();
			PreparedStatement pstm = conn.prepareStatement(sql);
			rs = pstm.executeQuery();
			if(rs.next()){
				count=rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return count;
		
	}
 在action中把獲取到數據庫的總條數賦給
Java代碼 複製代碼
  1. count=new BrowseSystemUser().getSysUserCount();    
count=new BrowseSystemUser().getSysUserCount();  
 4.現在就改輸出到頁面了.
Java代碼 複製代碼
  1. if(list.size()<=0){//先決條件   
  2.             out.println("{totalProperty:0,data:[]}");   
  3.             return null;   
  4.         }  
if(list.size()<=0){//先決條件
			out.println("{totalProperty:0,data:[]}");
			return null;
		}
 如果數據庫的數據位空就返回一個空.
5.如果有數據,就改拼json語句了:
Java代碼 複製代碼
  1. StringBuffer sb = new StringBuffer("{totalProperty:" + count   
  2.                 + ",data:[");   
  3.            
  4.         SystemUserVo sys = list.get(0);   
  5.   
  6.         sb.append("{userId:"+sys.getUserId()+",userName:'" + sys.getUserName() + "',userPhone:'"  
  7.                 + sys.getUserPhone() + "',userMail:'" + sys.getUserEmail()   
  8.                 + "',mobilePhone:'" + sys.getMobilePhone() + "',userAddress:'"  
  9.                 + sys.getUserAddress() + "'}");   
  10.         int size=list.size();   
  11.         for (int i = 1; i < size; i++) {   
  12.             SystemUserVo user = list.get(i);   
  13.             sb.append(",{userId:"+user.getUserId()+",userName:'" + new String(user.getUserName().getBytes()) + "',userPhone:'"  
  14.                     + user.getUserPhone() + "',userMail:'" + user.getUserEmail()   
  15.                     + "',mobilePhone:'" + user.getMobilePhone() + "',userAddress:'"  
  16.                     + new String(user.getUserAddress().getBytes()) + "'}");   
  17.         }   
  18.   
  19.         sb.append("]}");   
  20. out.println(sb.toString());   
  21. return null;  
StringBuffer sb = new StringBuffer("{totalProperty:" + count
				+ ",data:[");
		
		SystemUserVo sys = list.get(0);

		sb.append("{userId:"+sys.getUserId()+",userName:'" + sys.getUserName() + "',userPhone:'"
				+ sys.getUserPhone() + "',userMail:'" + sys.getUserEmail()
				+ "',mobilePhone:'" + sys.getMobilePhone() + "',userAddress:'"
				+ sys.getUserAddress() + "'}");
		int size=list.size();
		for (int i = 1; i < size; i++) {
			SystemUserVo user = list.get(i);
			sb.append(",{userId:"+user.getUserId()+",userName:'" + new String(user.getUserName().getBytes()) + "',userPhone:'"
					+ user.getUserPhone() + "',userMail:'" + user.getUserEmail()
					+ "',mobilePhone:'" + user.getMobilePhone() + "',userAddress:'"
					+ new String(user.getUserAddress().getBytes()) + "'}");
		}

		sb.append("]}");
out.println(sb.toString());
return null;
 這樣就實現了ext做的分頁.
發佈了19 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章