以前用dwr写的分页,感觉稍微有点麻烦,简单,可以在csdn的http://download.csdn.net/source/1413703下载,sqlser2000的数据库。
说明:我对json不熟悉,也不是陌生的那种,就是没怎么使用过,只是知道一点点。如果你也是这样的话,不妨你先看看
这里我的上一篇,我还是觉得挺简单的,代码没怎么细化,总体上讲简单,附上一下文件的源文件。
1、分页毫无疑问肯定有数据库链接类,注意,这里是mssql2005的数据库
package com.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* @Info 数据库链接管理类
* @Email wwwchendonglisahao@163.com
* @QQ 271069593
*/
public class DBManager {
private static final String URL = "jdbc:sqlserver://localhost:1433;databasename=Struts";
private static final String USERNAME = "sa";
private static final String PASSWORD = "";
public static Connection getConnection(){
Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (Exception e) {
System.out.println("DBManager.getConnection()" + e.getMessage());
e.printStackTrace();
}
return con;
}
public static void Close(ResultSet rs ,PreparedStatement pst,Connection conn){
try {
if (rs != null)
rs.close();
if (pst != null)
pst.close();
if (conn != null)
conn.close();
} catch (Exception e) {
System.out.println("DBManager.Close()" + e.getMessage());
e.printStackTrace();
}
}
}
2、数据库表结构信息
use struts
--drop table account
--新建表
create table account(
id int identity(1,1) primary key,
username varchar(10) default '',
age int ,
sex varchar(2)
)
--向表插入100条数据
declare @age int
declare @sex varchar(2)
set @age = 1
while(@age<=100)
begin
if(@age%3=0)
begin
set @sex = '男'
end
else
set @sex = '女'
insert into account values('冬冬',@age,@sex);
set @age = @age + 1
end
--查询表数据
select * from account
3、dwr环境配置
(1)、web.xml配置
<servlet>
<servlet-name>dwr-remote</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-remote</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
(2)、dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="p">
<param name="class" value="com.dao.AnalysePage"></param>
</create>
</allow>
</dwr>
说明:我是把dwr3.0的dtd文件下载下来了,所以上面的这一行<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "dwr30.dtd">红字部分请注意。
4、分页处理类
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import com.db.DBManager;
/**
* 处理完成分页,让dwr在页面上调用处理
*
*/
public class AnalysePage {
private Connection conn = null;
private PreparedStatement pst = null;
private ResultSet rs = null;
/**
* 处理分页的方法
* 默认为每页显示10条数据
* @param page 页数
*/
public ArrayList<String> loadAll(int page){
ArrayList<String> list = null;
int pageSize = 10;
String sql = "select top " + pageSize + " *,(select count(0) from Account) as datasizes from Account where id not in (select top " + (pageSize * (page-1)) + " id from Account)";
System.out.println(sql);
conn = DBManager.getConnection();
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCounts = rsmd.getColumnCount();
if(rs.next()){
list = new ArrayList<String>();
int datasizes = rs.getInt("datasizes");
int count = (int)Math.round(Math.ceil((double)datasizes/(double)pageSize));
do{
String json = "";
for(int i=1;i<=columnCounts;i++){
String columnName = rsmd.getColumnName(i);
String columnValue = rs.getString(i);
if("datasizes".equals(columnName)){
columnValue = count + "";
}
if(i==1){
json += "{";
}
if(i==columnCounts){
json += columnName + ":'" + columnValue + "'";
json += "}";
break;
}
json += columnName + ":'" + columnValue + "',";
}
list.add(json);
}while(rs.next());
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBManager.Close(rs, pst, conn);
}
return list;
}
public static void main(String[] args) {
AnalysePage dao = new AnalysePage();
ArrayList<String> list = dao.loadAll(1);
System.out.println(list.toString());
for (String string : list) {
System.out.println(string);
}
}
}
5、index.jsp页面使用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>分页列表页面</title>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<script type='text/javascript' src='<%=path %>/dwr/interface/p.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/util.js'></script>
<style type="text/css">
#mybody td{
text-align: center;
}
</style>
<script type="text/javascript">
var pageid = 1;
var totalpage = 1;
function loadPage(){
p.loadAll(pageid,analyseData);
}
function analyseData(objjson){
var nodata = document.getElementById("nodata");
if(objjson==null||objjson.length==0){
nodata.style.display = "block";
return ;
}
var tbody = document.getElementById("mybody");
removeTRS(tbody);//显示数据前,先清空数据
for(var i=0;i<objjson.length;i++){
var jj = objjson[i];
eval("var json = " + jj + ";");
totalpage = json.datasizes;
document.getElementById("totalpage").innerHTML = totalpage;
var tr = document.createElement("tr");
for(var j in json){
if("datasizes"==j){
continue;
}
var td = document.createElement("td");
td.innerHTML = json[j];
tr.appendChild(td);
}
tbody.appendChild(tr);
}
}
dwr.util.useLoadingMessage();
/**
*清空tr的数据
*/
function removeTRS(obj){
var len = obj.childNodes.length;
for(var i=0;i<len;i++){
obj.removeChild(obj.firstChild);
}
}
function goFirstPage(){
//判断当前是否为第一页,如果为第一页则不必去加载数据
if(pageid==1){
alert("已经为首页!");
return;
}
pageid = 1;
p.loadAll(1,analyseData);
document.getElementById("thispage").innerHTML = pageid;
}
function goNextPage(){
if(pageid==totalpage){
alert("已经为最末页,没有下1页!");
return;
}
pageid = pageid + 1;
document.getElementById("thispage").innerHTML = pageid;
p.loadAll(pageid,analyseData);
}
function goPrePage(){
if(pageid==1){
alert("已经为第1页,没有上一页!");
return;
}
pageid = pageid - 1;
document.getElementById("thispage").innerHTML = pageid;
p.loadAll(pageid,analyseData);
}
function goLastPage(){
if(pageid==totalpage){
alert('已经为最末页!');
return;
}
pageid = totalpage;
p.loadAll(pageid,analyseData);
document.getElementById("thispage").innerHTML = pageid;
}
</script>
<body>
<table style="border-collapse: collapse;" bordercolor="#FFCCFF" width="60%" border="1">
<tr>
<th>编号</th>
<th>名称</th>
<th>年龄</th>
<th>性别</th>
</tr>
<tbody id="mybody">
<tr id="nodata" style="display: none;">
<td style="text-align: center;" colspan="4">没有数据!</td>
</tr>
</tbody>
<tr>
<td colspan="4" style="text-align: center;">
<a href="javascript:void(0);" onclick="goFirstPage();" style="padding:5px;">首页</a>
<a href="javascript:void(0);" onclick="goPrePage();" style="padding:5px;">上一页</a>
<a href="javascript:void(0);" onclick="goNextPage();" style="padding:5px;">下一页</a>
<a href="javascript:void(0);" onclick="goLastPage();" style="padding:5px;">末页</a>
<span id="thispage">1</span>/<span id="totalpage">loading...</span>
</td>
</tr>
</table>
<script type="text/javascript">
window.onload = loadPage;
</script>
</body>
</html>
分享到:
相关推荐
在本项目中,我们将深入探讨如何利用DWR和JSON实现简单的分页功能。 首先,我们需要了解DWR的基本概念。DWR的核心是通过创建一个代理,使JavaScript可以像调用本地函数一样调用服务器端的Java方法。DWR提供了自动...
- **Remoting**:DWR实现了JavaScript和Java之间的远程调用,使前后端数据交换变得简单。 2. **DWR的主要组件:** - **Engine**:处理所有客户端到服务器的请求。 - **Ajax Engine**:处理与AJAX相关的请求。 -...
### DWR简单配置详解 #### 一、简介 Direct Web Remoting (DWR) 是一个开源框架,它简化了从JavaScript调用Java方法的过程。DWR不仅提供了远程调用的功能,还内置了一些辅助功能,例如数据序列化和安全性检查等。...
少儿编程scratch项目源代码文件案例素材-直升机飞行.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
健康监测_Android开发_BLE蓝牙通信_心率数据采集与存储_基于小米手环2的实时心率监测应用_支持后台长时间运行的心率记录工具_可导出SQLite数据库的心率数据分析系统_适
少儿编程scratch项目源代码文件案例素材-种花模拟器.zip
嵌入式系统开发_FreeRTOS实时操作系统_STM32F103C8T6微控制器_OLED显示屏_DHT11温湿度传感器_多任务调度_多级菜单设计_万年历算法_电子闹钟功能_参数配
基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
scratch少儿编程逻辑思维游戏源码-猫猫粉碎.zip
scratch少儿编程逻辑思维游戏源码-蓝胡子.zip
scratch少儿编程逻辑思维游戏源码-美食大亨.zip
scratch少儿编程逻辑思维游戏源码-洛克人.zip
scratch少儿编程逻辑思维游戏源码-龙冲刺.zip
思幻个人引导页V2.2版本11月29日更新.zip
scratch少儿编程逻辑思维游戏源码-骑士风斩法.zip
移动应用开发_H5CSS3ionicng-cordovaMVVM模式_基于HTML5和CSS3技术实现多页面布局ionic指令数据绑定ui-route单页跳转调用手机
少儿编程scratch项目源代码文件案例素材-植物大战僵尸创造版 Ver. 1.0.3.zip
scratch少儿编程逻辑思维游戏源码-日落(2).zip