sencha touch实现分页

从客户端传过来的参数为:limit,start

服务端代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="com.gr.jiang.json.JsonString"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
Connection con = null ;
ResultSet set  = null ;
PreparedStatement pre = null ;
 try{
   Class.forName("com.mysql.jdbc.Driver").newInstance() ;
  String url = "jdbc:mysql://localhost:3306/news_mobile" ;
  con = DriverManager.getConnection(url,"root","jiang") ;

  int pagecount = 0 ;
  String SEL = "SELECT * FROM books limit ?,?" ;
  String COU = "SELECT COUNT(*) FROM books" ;
  pre = con.prepareStatement(SEL) ;
  pre.setInt(1,Integer.parseInt(request.getParameter("start"))) ;
  pre.setInt(2,Integer.parseInt(request.getParameter("limit"))) ;
  set = pre.executeQuery() ;
  int count = 0 ;

  //JsonString json = new JsonString() ;
  String str = "[" ;
  while(set.next()){
      str += "{\"id\":\""+set.getInt("id")+"\",\"image_url\":\""
          +set.getString("image_url")+"\",\"book_name\":\""
          +set.getString("book_name")+"\",\"author\":\""
          +set.getString("author")+"\",\"description\":\""
          +set.getString("description")+"\"}," ;
     // json.start() ;
      //json.setJson("id",set.getInt("id")) ;
      //json.setJson("image_url",set.getString("image_url")) ;
      //json.setJson("book_name",set.getString("book_name")) ;
      //json.setJson("author",set.getString("author")) ;
      //json.setJson("description",set.getString("description")) ;
      //json.end() ;
      count = set.getRow() ;
  }
  str = str.substring(0,str.length()-1)+"]" ;
  //System.out.println(str) ;
  pre = con.prepareStatement(COU) ;
  set = pre.executeQuery() ;

  set.next() ;
      pagecount = set.getInt(1) ;

  if(count > 0){
      out.println("{\"success\":\"true\",\"bookCount\":\""+pagecount+"\",\"books\":"+str+"}") ;
  }
  else
  {
      out.println("{\"success\":\"false\",\"message\":\"读取数据失败\"}") ;
  }
 }catch(SQLException e){
     out.println("{\"success\":\"false\",\"message\":\"读取数据失败\"}") ;
     e.printStackTrace() ;
 }finally{
     set.close() ;
     pre.close() ;
     con.close() ;

 }
%>

客户端app.js:

Ext.require([
    'Ext.data.Store',
    'Ext.data.reader.Json',
    'Ext.dataview.DataView'
])
Ext.application({
    name: 'MyApp',
    icon: 'images/icon.png',
    glossOnIcon: false,
    phoneStartupScreen: 'images/phone_startup.png',
    tabletStartupScreen: 'images/tablet_startup.png',
    launch: function() {
        Ext.define('BookInfo', {
            extend: 'Ext.data.Model',
            config:{
                fields:['image_url','book_name','author','description']
            }
        });
        var bookReader=Ext.create('Ext.data.reader.Json',{
            type: 'json',
            rootProperty: 'books',
            totalProperty:'bookCount'
        });
        var pageCount;//页数
        var bookStore=Ext.create('Ext.data.Store',{
            autoLoad:true,
            model:'BookInfo',
            proxy: {
                type: 'ajax',
                url : 'http://10.65.9.223:8080/news_mobile/json.jsp',
                reader: bookReader
            },
            pageSize:5,
            scope:this,
            listeners: {
                load:function(store,records,successful,operation) {
                    //读取数据失败
                    if(!successful)
                        //弹出错误信息
                        Ext.Msg.alert(
                            this.getProxy().getReader().rawData.message
                        );
                    else
                    {
                        var recordCount=bookReader.rawData[bookReader.getTotalProperty()];
                        var pageSize=this.getPageSize();
                        pageCount=(recordCount-recordCount%pageSize)/pageSize;
                        if(recordCount%pageSize>0)
                            pageCount+=1;
                        Ext.getCmp('pageInfo').setText(
                            String(this.currentPage)+"/"+pageCount+"页"
                        );
                    }
                }
            }
        });
        var toolbar =Ext.create('Ext.Toolbar',{
            docked : 'bottom',
            width:'100%',
            layout:{
                type:'hbox',
                pack:'center'
            },
            items: [
            {
                iconMask:true,
                iconCls: 'firstpage',
                handler:function(){
                    bookStore.loadPage(1);
                }
            },
            {
                iconMask:true,
                iconCls: 'arrow_left',
                handler:function(){
                    if(bookStore.currentPage>1)
                    {
                        bookStore.previousPage();
                    }
                }
            },
            {
                iconMask:true,
                iconCls: 'arrow_right',
                handler:function(){
                    if(bookStore.currentPage<pageCount)
                    {
                        bookStore.nextPage();
                    }
                }
            },
            {
                iconMask:true,
                iconCls: 'lastpage',
                handler:function(){
                    bookStore.loadPage(pageCount);
                }
            },
            {
                html:'',
                style:'font-size:16px',
                id:'pageInfo'
            }]
        });

        var bookTemplate=new Ext.XTemplate(
            '<tpl for=".">',
            '<div class="Book_img"><img src="{image_url}"/></div>',
            '<div class="Book_info">',
            '<h2>{book_name}</h2><br><h3>作者:{author}<h3>',
            '<p>{description:ellipsis(40)}</p>',
            '</div>',
            '</tpl>'
        );
        var dataview=Ext.create('Ext.DataView',{
            store:bookStore,
            items:toolbar,
            itemTpl:bookTemplate,
            emptyText:'没有数据',
            baseCls:'Book'
        });
        Ext.Viewport.add(dataview);
    }
});

HTML
 <!DOCTYPE html>
<html>
<head>
<title>对服务器端数据进行分页</title>
<link rel="stylesheet" href="css/application.css"
type="text/css">
<style type="text/css">
.Book-item {
    padding: 10px 0 10px 68px;
    border-top: 1px solid #ccc;
}
.Book-item h2 {
    font-weight: bold;
}
.Book-item .Book_img {
    position: absolute;
    left: 10px;
}
.Book-item .Book_img img {
    max-width: 59px;
}
.Book-item .Book_info{
    padding-left:5px;
    font-size:12px;
}
</style>
<script src="js/sencha-touch.js">
</script><script src="js/app.js"></script>
</head>
<body></body>
</html>

时间: 2024-11-05 15:49:14

sencha touch实现分页的相关文章

HTML5开发移动web应用——Sencha Touch篇(7)

Sencha Touch中的Ext.DomHelper组件能够方便的实现对元素的追加或重写操作 演示样例: launch:function(){ function appendDom(){ Ext.DomHelper.append('my-div',{ id:'url-list', tag:'ul', //指定追加的元素种类 cn:[//或children.使用数组形式定义数组内的子元素 { tag:'li',, cn:[{ tag:'a', html:'google', href:'http:

HTML5开发移动web应用——Sencha Touch篇(8)

DataView是Sencha Touch中最重要的组件,用于数据的可视化.数据可视化的重要性不言而喻,可以讲任何数据以形象的方式展示给用户.目前,如何更好地可视化是许多公司或框架都在追求的.通过数据的可视化可以发现数据之间的规律,预测未来的情况.下面我们就看看Sencha Touch中是怎么进行数据可视化的. 由于DataView组件内容非常多,所以将在以后的一段时间内持续这一部分的学习. 首先废话不多说,直接上使用DataView组件的代码框架. launch:function(){ var

HTML5开发实战——Sencha Touch篇(1)

学习了许多基本的Sencha Touch内容,已经了解了Sencha Touch的开发模式.接下来一段时间我们将利用Sencha Touch来进行自己的web应用构建.先要解决的是前端的问题,从最简单的入手,一个基本的登录界面. 最简单的登录界面大体由以下介个元素组成:用户头像部分.用户名输入部分.密码输入部分.提交按钮.我们从这种虽简单的界面开始,逐步进行界面实现. 一.创建主面板 Ext.require('Ext.Panel'); Ext.application({ name:'MyApp'

前端是Sencha Touch+ Cordova(转)

从13年初开始,我的关注点一直在两个点上,一个是股票,一个是移动前端和大数据技术,互联网金融的发展会让互联网证券越来越火热,当然,我也希望将这两个关注点结合到一起,做一些事情. 现在,我的APP和微信公众号已经上线,每天下班都会花一个多小时的时间在他们的开发上,每天白天脑子里基本都在想,怎么去改进.完善.还能做哪些有意义的新功能,然后晚上把代码写出来,这期间不仅有技术上的补充,还包括对股市投资的一些知识补充,我老婆说我已经着了魔了,陪她出来逛街时都不在状态.. 随着对股票投资的理解,我的APP的

Sencha Touch 之初接触

1.Sencha Touch开发与普通web开发有什么区别? Sencha Touch(为方便起见,本文后面一律简写为ST)页面的开发跟普通html页面相比,总体来说没有本质上的区别,只是引入了对html5和CSS3的支持,然后提供了对移动设备(iPad/iPhone/Android Mobile/Android Tablet/BlackBerry等)的特殊优化.事实上也正是因为html5和CSS3才使得ST可以实现如此美妙以至于可以媲美Native应用程序的交互效果. 2.特殊的Documen

HTML5开发移动web应用——Sencha Touch篇(12)

Sencha Touch同样可以使用地图.多媒体等插件. 1.Map组件 我们通过Ext.Map定义Map组件,其xtype为map.除了使用该插件外,还要调用Google的地图API所使用的js文件,代码如下: <script src="https://maps.google.com/maps/api/js?sensor=true"></script> 引入该文件后,我们就可以编写js代码来显示地图了: Ext.require('Ext.Map') Ext.a

Sencha Touch 安装

Setup Sencha Touch Content Setup Sencha Touch 1 java environment 2 install ruby (rubyinstaller-1.9.3-p0.exe will be better) 3 install sencha (SenchaCmd-4.0.0.203-windows.exe) 4 test your sencha 5 general a project 5.1 go to touch directory 5.2 genera

Sencha Touch 和 jQuery Mobile 的比较

Sencha Touch 和 jQuery Mobile 的比较 英文原文:Sencha Touch vs jQuery Mobile 标签: Sencha Touch jQuery Mobile 103人收藏此文章, 我要收藏oschina 推荐于 2年前 (共 7 段, 翻译完成于 08-02) (23评) 参与翻译(1人): yale8848 仅中文 | 中英文对照 | 仅英文 | 打印此文章 很多人问我Sencha Touch (百度百科Sencha Touch译者加) 和jQuery

Sencha Touch 心得

1.Sencha Touch 默认 style="width: 100% !important;"时如何去掉这个设置? updateRecord: function(record) { var me = this; me.element.setStyle('width',''); } 使用setStyle方法重新定义宽度,实际上是清除了上述style.