zoukankan      html  css  js  c++  java
  • [Extjs] Ext4 Ext.grid.Panel 分页实现(mybatis 分页插件-PageHelper 使用)

    先看图:

    页面js代码:

     var userStore=Ext.create('Ext.data.Store', {
    	    storeId:'userStore',
    	    fields:['uname', 'email', 'phone','regIp','regTime'],
    	    proxy: {
    	        type: 'ajax',
    	        url:'${pageContext.request.contextPath}/back/user/userList.do',
    	        reader: {
    				// 設置 json樣式
    	            type: 'json',
    				rootProperty:"rows",
    				totalProperty:"total"
    	        }
    	    },
    	    autoLoad: true,
    	    pageSize:10 //每页记录数默认25
    	});
    
     userStore.load({
    	 params: {
    		 start: 0,
    		 limit: 10
    	 }
     });
     
     var ckm=Ext.create("Ext.selection.CheckboxModel");
      Ext.onReady(function(){
    		Ext.create('Ext.grid.Panel', {
    		    title: '用户信息',
    		    id:'userGridPanel',
    		    selModel:ckm,
    		    store:userStore,// Ext.data.StoreManager.lookup('simpsonsStore'),
    		    columns: [
    		         { text: '用户ID',  dataIndex: 'uid',align: 'center',hidden:true,sortable:false },
    		        { text: '用户名',  dataIndex: 'uname',align: 'center',
    		        	 sortable:false },
    		        { text: '邮箱', dataIndex: 'email',align: 'center',sortable:false },
    		        { text: '电话', dataIndex: 'phone',align: 'center',sortable:false },
    		        { text: '注册IP', dataIndex: 'regIp',align: 'center',sortable:false },
    		        { text: '注册时间', dataIndex: 'regTime',align: 'center',scope:this,renderer:function(value){
    		        	var val=longToString(value,'Y-m-d H:m:s')
    		        	//console.info('获取的值为:{}'+value+' , '+val);
    		        	return  val;
    		        } }
    		    ],
    		  forceFit:true,//强制列表宽度自适应
    		   autoLoad:true,
    		    tbar: Ext.create('Ext.toolbar.Toolbar',{
    		    	
    		    	//width   : 500,
    				items: [{
    					text: '删除',
    					xtype: 'button',
    					iconCls: 'delete',
    					id: 'user_delete',
    					handler: userInfoDel
    				},{
    					text:'添加',
    					xtype:'button',
    					iconCls:'add',
    					id:'user_add',
    					handler:userInfoAdd
    				},{
    					text:'修改',
    					xtype:'button',
    					iconCls:'update',
    					id:'user_update',
    					handler:userInfoUpdate
    				}]
    		    	
    		    }),
    		    renderTo: Ext.getBody(),
    		    //分页
    		    bbar: Ext.create('Ext.toolbar.Paging',{
    		    	beforePageText:'当前第',
    		    	afterPageText:'页',
    		    	refreshText:'刷新',
    		    	store:userStore,
    		    	displayInfo:true,
    		    	displayMsg:'显示:{0}-{1}条,总共:{2}条',
    		    	emptyMsg:'当前查询无记录'
    		    })
    		});
      });
      
    
      
      
      //删除用户信息
      function userInfoDel(){
    
    	  var uid='';
    	  var selectionModel = Ext.getCmp('userGridPanel').getSelectionModel();
    	  var selection = selectionModel.getSelection();
    	  if(selection.length==0){
    		  Ext.Msg.alert("提示","请选择要删除的记录!");
    		  return ;
    	  }else{
                Ext.Msg.confirm("提示","确定删除?",function(button, text){
    				console.info(button+","+text);
    				if(button=="yes"){
    					for(var i=0;i<selection.length;i++){
    						uid = uid+selection[i].get('uid')+",";
    					}
    					Ext.Ajax.request({
    						url: '${pageContext.request.contextPath}/back/user/delete.do',
    						params:{uid:uid},
    						/**
    						 *Object {request: Object, requestId: 3, status: 200, statusText: "OK",
    		   *  responseText: "{"restMsg":"用户删除成功!","success":true}"…}
    						 * @param response
    						 * @param opts
    						 */
    						success: function(response, opts) {
    
    							Ext.Msg.alert("信息提示",response.responseText.restMsg);
    							Ext.getCmp('userGridPanel').getStore().reload();
    						},
    						failure: function(response, opts) {
    							Ext.Msg.alert("信息提示",response.responseText.restMsg);
    						}
    					});
    				}
    			});
    
    	  }
    
    	  
      }
      
      
      
      //修改用户信息
      function userInfoUpdate(){
    	  
    	  var selectionModel = Ext.getCmp('userGridPanel').getSelectionModel();
    	  var selection = selectionModel.getSelection();
    	  if(selection.length==0){
    		  Ext.Msg.alert("提示","请选择要修改的记录!");
    		  return ;
    	  }
    	  
    	  if(selection.length>1){
    		  Ext.Msg.alert("提示","只能修改一条记录!");
    		  return ;
    	  }
    	  //获取选择的记录
    	  var record =selectionModel.getLastSelected();
    	  console.info(record.get("email")+","+record.get("phone"));
    	  
      }
    

     看分页后台实现:

    1.在mybatis配置文件中添加配置:

    <plugins>
            <plugin interceptor="com.github.pagehelper.PageHelper">
                <!-- 4.0.0以后版本可以不设置该参数 -->
                <!--<property name="dialect" value="mysql"/>-->
                <!-- 该参数默认为false -->
                <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
                <!-- 和startPage中的pageNum效果一样-->
                <property name="offsetAsPageNum" value="true"/>
                <!-- 该参数默认为false -->
                <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
                <property name="rowBoundsWithCount" value="true"/>
                <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
                <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
                <property name="pageSizeZero" value="true"/>
                <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
                <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
                <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
                <property name="reasonable" value="true"/>
                <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
                <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
                <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
                <!-- 不理解该含义的前提下,不要随便复制该配置 -->
                <property name="params" value="pageNum=start;pageSize=limit;"/>
                <!-- 支持通过Mapper接口参数来传递分页参数 -->
                <property name="supportMethodsArguments" value="true"/>
                <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
                <property name="returnPageInfo" value="check"/>
            </plugin>
        </plugins>

    或者在spring的配置文件中添加配置:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource"/>
      <property name="mapperLocations">
        <array>
          <value>classpath:config/mapper/*.xml</value>
        </array>
      </property>
      <property name="typeAliasesPackage" value="com.test.pojo"/>
      <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageHelper">
            <property name="properties">
              <value>
                dialect=mysql
              </value>
            </property>
          </bean>
        </array>
      </property>
    </bean>

    2. dao 文件:

    public interface UserDao extends BaseDao {
        
        List<User> queryForUsers(Map<String, Object> map);
    
        @Override
        int delete(int id) throws Exception;
    
    
    }

    service层对应文件:

    /**
     * @author zhangtb
     * @date 2015年12月20日13:26:50
     */
    
    @Service
    public class UserService {
        
        @Autowired
        private UserDao userDao;
    
        
        public List<User> queryForUsers(Map<String, Object> map){
            return userDao.queryForUsers(map);
        }
    
        
    
    }

    3.controller中分页实现:

    /**
         * 用户列表信息
         */
        @RequestMapping("/userList")
        @ResponseBody
        public void userList(HttpServletRequest request,Writer writer){
            String name = request.getParameter("name");
            Page page = PageUtil.getPage(request);
            Map<String, Object> map = new HashMap<String,Object>();
            map.put("name",name);
            map.put("page",page.getPage());
            map.put("limit",page.getLimit());
            PageHelper.startPage((Integer) map.get("page"),(Integer)map.get("limit"));
            List<User> userList=userService.queryForUsers(map);
            PageInfo<User> pageInfo=new PageInfo<>(userList);
            List<User> users=pageInfo.getList();
            long total = pageInfo.getTotal();
            JSONObject row=new JSONObject();
            JSONArray ary = new JSONArray();
            for(User user :users){
                ary.add(user);
            }
            row.put("rows",ary);
            row.put("total",total);
            try {
                writer.write(row.toJSONString());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    返回数据为:

    {"total":12,"rows":[{"email":"233434@163.com","phone":"17890123421","regIp":"127.0.0.1","regTime":1454883085000,"uid":1,"uname":"admin"},{"email":"434234234234","phone":"3242432423","regIp":"127.0.0.1","regTime":1456997965000,"uid":2,"uname":"我看"},{"email":"233434@163.com","phone":"17890123421","regIp":"","regTime":1456394760000,"uid":4,"uname":"Test_001"},{"email":"233434@163.com","phone":"17890123421","regIp":"172.189.12.32","regTime":1456394760000,"uid":5,"uname":"TEST_002"},{"email":"233434@163.com","phone":"18910121322","regIp":"localhost","regTime":1454926128000,"uid":6,"uname":"TEST_003"},{"email":"fsfs@sina.com.cn","phone":"19019324321","regIp":"localhost","regTime":1454969111000,"uid":7,"uname":"Test_0023"},{"email":"fsfs@sina.com.cn","phone":"19019324321","regIp":"localhost","regTime":1454969389000,"uid":8,"uname":"Test_0024"},{"email":"fsfs@sina.com.cn","phone":"19019324321","regIp":"localhost","regTime":1454969390000,"uid":9,"uname":"Test_0025"},{"email":"fsfs@sina.com.cn","phone":"19019324321","regIp":"localhost","regTime":1454969390000,"uid":10,"uname":"Test_0026"},{"email":"fsfs@sina.com.cn","phone":"19019324321","regIp":"localhost","regTime":1454969390000,"uid":11,"uname":"Test_0027"}]}

    至此,mybatis的分页实现结束。

  • 相关阅读:
    堆排序回顾
    动画函数封装
    mouseenter 和mouseover的区别
    元素滚动 scroll 系列
    元素可视区 client 系列
    元素偏移量 offset 系列
    JS执行机制
    BOM
    常用键盘事件
    常用鼠标事件
  • 原文地址:https://www.cnblogs.com/lonelywolfmoutain/p/5204023.html
Copyright © 2011-2022 走看看