以前用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不仅提供了远程调用的功能,还内置了一些辅助功能,例如数据序列化和安全性检查等。...
DWR (Direct Web Remoting) 是一个开源Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行双向通信。DWR使得动态Web应用能够轻松地实现Ajax(Asynchronous JavaScript and XML)功能,即在不刷新...
总的来说,"dwr分页示例(jsp)"是一个展示如何利用DWR和Ajax技术在JSP页面中实现高效、用户友好的数据分页功能的实例。通过理解DWR的工作机制、配置、JavaScript调用以及前端界面的构建,开发者可以构建出自己的...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许在JavaScript和服务器端的Java之间进行异步通信,从而实现Web应用的Ajax功能。在这个例子中,我们将深入探讨如何利用DWR来返回JSON数据。 JSON(JavaScript ...
6. **状态维护**:为了确保用户在页面之间导航时能够保持状态,可以使用URL参数或隐藏表单字段来存储当前页码和分页设置。当页面加载时,可以读取这些值并初始化分页控件。 7. **优化性能**:考虑到大量数据可能...
1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: <!-- 配置DWR --> <servlet-name>dwr-invoker</servlet-name> <servlet-class> org.directwebremoting.servlet.DwrServlet </servlet-class> ...
7. **测试与调试**:了解如何测试DWR和Spring结合的功能,包括使用浏览器的开发者工具进行调试,以及使用DWR提供的监控和日志功能。 由于没有具体的压缩包文件内容,我们无法深入探讨具体代码和实现细节。但通过...
DisplayTag是一个强大的JSP标签库,提供了易于使用的分页和排序功能。使用DisplayTag,你需要在Action中获取到数据的总条数和当前页的数据,然后在JSP页面上使用DisplayTag的标签进行显示。另一种方式是通过自定义...
- `pagination.jsp`: JSP页面,包含分页条和数据展示区域,使用JavaScript处理分页逻辑。 通过以上步骤,我们可以利用DWR和JSP实现一个高效、无刷新的分页功能,为用户提供更加流畅的浏览体验。在实际开发中,还...
Direct Web Remoting (DWR) 是一个开源Java库,它允许在Web应用程序中轻松地进行JavaScript和服务器端Java代码之间的交互。DWR使得AJAX(Asynchronous JavaScript and XML)开发更为简便,允许开发者在不刷新整个...
这个资源包包含了DWR的jar文件和源代码,可以帮助开发者深入了解并使用DWR框架。 1. **DWR.jar**: 这是DWR的核心库文件,包含了运行DWR所需的所有类和资源。当你在项目中引入dwr.jar,你可以使用DWR提供的API来...
在本场景中,"dwr-yui实现分页"指的是利用DWR和YUI库来实现网页的分页功能。 分页是Web应用程序中常见的功能,尤其是处理大量数据时,它可以提高用户体验,避免一次性加载过多内容导致页面加载慢或者浏览器崩溃。...
DWR (Direct Web Remoting) 是一个开源的Java库,用于在Web应用程序中实现Ajax功能,使得JavaScript可以直接调用服务器端的Java方法,从而实现实时的、无需刷新页面的数据交互。DWR充当了Java开发者和网页设计者之间...
这个不是我的原创,原文件出至这里:...原资源包含了,源代码和API Doc,只是美中不足的是没有整理成可用的zip文档,我这特分离了一下,并重新打好包了,初步测试了一下能用。
### dwr+hibernate实现的分页技术详解 在当今快速发展的互联网环境中,网站和应用程序需要处理大量的数据。为了提高用户体验并优化服务器资源利用,分页技术成为了必不可少的一部分。本文将详细介绍如何通过结合dwr...