今天闲来无事,写了个ssh+ajax分页的demo,还有很多不成熟的地方,大家凑合看吧。 这个demo的框架采用现在很流行的ssh,在分页功能上采用了ajax技术。
框架版本:
Struts:2.0.14
Hibernate:3.3.1
Spring:2.5.6
ajax分页用到了jQuery类库
数据库使用的是MySql 5.0
相信大家对这些都是耳熟能详的了,我也就不在一一做介绍了,如果大家有不明白的地方,自己google一下了。废话不多说,动手干吧,不然就有人捡砖头了。哈哈!
一、准备
1. 项目所需的jar包(struts2,hibernate,spring),不多说了,从官网上都可以下载。截图如下:
2. 数据库,脚本如下:
create database if not exists dbtest;
use dbtest;
/*数据表 `classify` 的表结构*/
drop table if exists classify;
create table classify (
cid int(20) not null auto_increment,
classname varchar(50) default null,
primary key(cid)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
/*写个存储过程来初始化数据表数据,很简单*/
DELIMITER $$;
DROP PROCEDURE IF EXISTS `dbtest`.`init`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `init`()
BEGIN
declare v int;
set v=0;
while v<50 do
insert into classify(classname) values('Hi,This is a test');
set v=v+1;
end while;
END$$
DELIMITER ;$$
/*调用存储过程*/
call init();
3. 打开你的myeclipse,新建一个web项目,添加相应的jar包、配置文件(如applicationContext.xml、struts.xml、hibernate.cfg.xml等),当然还要修改web.xml文件了,这些文件的编写就不一一表述了,因为google一下多的是。
二、编写
1. 先看看整个项目的结构吧,也很简单,相信大家一看便知了。
很简单吧,从dao到action,相信大家都很熟悉了。大家别嫌我懒啊,一会儿会把整个项目的源文件上传,大家自己看源码吧,里面我也有写注释的。
这里主要说说ajax分页吧,我这里用到的是一个我从网上找的基于jQuery的分页组件,然后跟据自己的需求,稍加改动。jQuery的.post方法还是挺好用的,我就是这个方法来实现ajax分页的。
var url = "pagelist.action?page=" + page;
$.post(
url,
function(data){
//alert(data);
var items = data.selectNodes("//classify");
var result = "<table id='mytable' width='100%' border='1' cellpadding='0' cellspacing='0'>";
for (var i = 0; i < items.length; i++) {
var classify = items[i];
result += "<tr>";
result += "<td width='15%'>";
result += "<input type='checkbox' name='toDelete' value='";
result += classify.getElementsByTagName("cid")[0].firstChild.nodeValue;
result += "' />";
result += "</td>";
result += "<td width='20%'>" + classify.getElementsByTagName("cid")[0].firstChild.nodeValue + "</td>";
result += "<td>";
result += "<a href='/SSHTEST/classify/edit.action?cid=";
result += classify.getElementsByTagName("cid")[0].firstChild.nodeValue;
result += "'>";
result += classify.getElementsByTagName("classname")[0].firstChild.nodeValue;
result += "</a>";
result += "</td>";
result += "</tr>";
}
result += "</table>";
$("#mainlist").html("");
$("#mainlist").html(result);
}
);
这段js代码就是使用post方法来获得包含数据的xml文件,并解析这个xml文件,拼写成一段html代码,然后将这段html代码填充到名为“mainlist”的div中。
而最基本的分页实际是采用的hibernate的分页,dao中的分页方法如下,同样也很简单
/**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param pageSize 一次查询几条记录
* @return list集合
*/
public List<T> queryForPage(String hql, int offSet, int pageSize) {
Query query = getSession().createQuery(hql);
query.setFirstResult(offSet);
query.setMaxResults(pageSize);
return query.list();
}
这里还用到了一个保存分页信息的类PageBean,如下:
import java.util.List;
public class PageBean {
private List list; // 要返回的某一页的记录列表
private int currentPage; // 当前页
private int allRow; // 总记录数
private int totalPage; // 总页数
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getAllRow() {
return allRow;
}
public void setAllRow(int allRow) {
this.allRow = allRow;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
/**
* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
*
* @param page
* 传入的参数(可能为空,即0,则返回1)
* @return 当前页
*/
public static int countCurrentPage(int page) {
final int curPage = (page == 0 ? 1 : page);
return curPage;
}
/**
* 计算当前页开始记录
*
* @param pageSize
* 每页记录数
* @param currentPage
* 当前第几页
* @return 当前页开始记录号
*/
public static int countOffset(int pageSize, int currentPage) {
final int offset = pageSize * (currentPage - 1);
return offset;
}
/**
* 计算总页数,静态方法,供外部直接通过类名调用
*
* @param pageSize
* 每页记录数
* @param allRow
* 总记录数
* @return 总页数
*/
public static int countTotalPage(int pageSize, int allRow) {
int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
/ pageSize + 1;
return totalPage;
}
}
此外还有一个用来处理分页操作并返回PageBean对象的工具类,如下:
import java.util.List;
import com.sshtest.genericdao.IGenericDAO;
public class PageCommand {
public static PageBean queryForPage(IGenericDAO<?, ?> dao, String hql,
int page, int pageSize) {
int allRow = dao.getAllRowCount(hql); // 总记录数
int totalPage = PageBean.countTotalPage(pageSize, allRow); // 总页数
int currentPage = PageBean.countCurrentPage(page); // 计算当前页
int offSet = PageBean.countOffset(pageSize, currentPage); // 当前页开始记录
List list = dao.queryForPage(hql, offSet, pageSize); // "一页"的记录
if (list.size() == 0) {
// 如果是最后一页,显示上页内容
if (currentPage > totalPage) {
currentPage = totalPage;
offSet = PageBean.countOffset(pageSize, currentPage);
list = dao.queryForPage(hql, offSet, pageSize);
}
}
// 把分页信息保存到Bean中
PageBean pageBean = new PageBean();
pageBean.setAllRow(allRow);
pageBean.setCurrentPage(currentPage);
pageBean.setList(list);
return pageBean;
}
}
下面再来看看action吧,在action中处理分页的对应方法如下:
......
// ajax分页
public String doListClassify() throws Exception {
PageBean pageBean = classifyBiz.queryForPage(getPage(), 10);
String msg = parasToXML(pageBean.getList());
System.out.println(msg);
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.print(msg);
out.flush();
out.close();
return SUCCESS;
}
@SuppressWarnings("unchecked")
private String parasToXML(List list) {
StringBuffer bf = new StringBuffer();
bf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
bf.append("<items>");
for (Iterator it = list.iterator(); it.hasNext();) {
Classify classify = (Classify) it.next();
bf.append("<classify>");
bf.append("<cid>" + classify.getCid() + "</cid>");
bf.append("<classname>" + classify.getClassname() + "</classname>");
bf.append("</classify>");
}
bf.append("</items>");
return bf.toString();
}
......
至于struts.xml的编写,spring的配置等我就不一一详述了,因为附件里都有。
三、测试
终于到测试了,把项目部署到tomcat中,启动服务,打开浏览器,输入相应的地址,运行效果如下:
总结:当然由于篇幅限制,不可能全都说到,不过相信大家水平都很高,不难看懂的。而且本人水平有限,有不对的地方还希望大家能及时的指出,最后将项目代码上传,详细的大家可以看代码了。
- 大小: 206.5 KB
- 大小: 100.1 KB
- 大小: 123.6 KB
分享到:
相关推荐
SSH + Ajax + 分页 小项目是一个典型的Web应用程序开发实例,它结合了Spring、Struts2和Hibernate这三大主流Java企业级开发框架,并利用Ajax技术实现了页面无刷新的分页功能。下面将详细介绍这个项目中的关键技术和...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
在“ssh+oracle分页”这个主题中,我们将深入探讨如何利用这三个框架与Oracle数据库进行集成,并实现数据的分页显示。 1. **Struts框架**:Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
采用SSH+ajax(DWR)实现增删改查+分页的功能!!含有数据库!可以直接运行!
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH+JSP+SQL+Ajax 是一套常见的Web开发技术组合,它们在构建动态、交互性强的Web应用程序中发挥着重要作用。下面将详细解释这些技术及其相互间的应用。 **SSH(Struts + Spring + Hibernate)** 1. **Struts**:这...
在这个场景下,"SSH+ORACLE好用分页"意味着我们将SSH框架与Oracle数据库结合,实现了高效的数据分页功能。 数据分页是Web应用中常见的需求,特别是在处理大量数据时,分页可以提高用户体验,避免一次性加载过多数据...
在这个"SSH+ExtJs分页小例子"中,我们将探讨如何将这两种技术结合实现数据分页显示。 首先,我们来看NewsDAO.java文件。这个文件包含了两个关键方法:`findPageAll`和`totalRecord`。`findPageAll`方法实现了分页...
这个是一个ssh+ajax的增删改查实例,很适合刚入门的程序员,在项目中发展肯定要比你整天坐着看书好,希望会对大家有用
这个压缩包中的资源,"SSH+jQuery+json 实现的Ajax操作,绝对精华,代码简练清晰,绝对能看明白",显然提供了一个使用这些技术实现Ajax级联操作的实例。下面将详细介绍这些技术及其在Ajax操作中的应用。 **SSH ...
总的来说,"SSH+Oracle通用分页"是Java Web开发中常见的需求,它涉及到SSH框架的集成使用和Oracle数据库的高效查询策略。理解并熟练掌握这些知识,对于开发高性能、用户体验良好的Web应用至关重要。在实际项目中,还...
这个项目"ssh+ajax的二级下拉菜单"结合了SSH框架与Ajax技术,实现了动态的、交互式的用户界面,特别是二级下拉菜单的功能。这个功能在网页中常见于地区选择、类别导航等场景,能够提供更流畅的用户体验。 首先,...
在这个"SSH+Mysql无刷新分页实例"中,我们将探讨如何利用SSH框架与MySQL数据库实现网页的无刷新分页功能,从而提高用户体验。 首先,SSH框架中的Spring负责控制层,它提供依赖注入(Dependency Injection,DI)和...
SSH+Ajax+jQuery是Web开发中的核心技术组合,广泛应用于构建动态、交互性强的Web应用程序。SSH代表Spring、Struts和Hibernate三个开源框架,它们分别负责应用的依赖注入、MVC设计模式以及对象关系映射。Ajax...
### 使用SSH+Ajax实现上传进度条的技术解析 #### 一、技术背景介绍 在Web开发领域,用户上传大文件时的体验优化一直是重要的研究方向之一。传统的文件上传方式往往缺乏实时反馈机制,使得用户在上传过程中无法获知...
SSH+Ajax+JSON在Web开发中的应用主要集中在构建动态、响应迅速的用户界面,这里我们主要探讨Spring、Struts、Hibernate这三大框架如何与Ajax和JSON技术结合,以实现省市级联选择的效果。 首先,Spring是Java企业级...