- 浏览: 25401 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
laozhao:
大侠,你好,能不能把config配置贴出来?还有 " ...
JAVAMAIL邮件接收开发 -
qingfeng_101:
呵呵 我也有个分页的东东 是个JavaBean+JSP标签的 ...
ssh整合分页 -
xiaoye4188:
<div class="quote_title ...
ssh整合分页 -
chrisx:
我的个人组件包中关于分页是这么实现的
DAO: 使用的是我写的 ...
ssh整合分页 -
wulinshishen:
都是厉害的人物啊
ssh整合分页
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public interface MemberDao{
//省略了其他的代码
/** *//**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return
*/
public List queryForPage(final String hql,final int offset,final int length);
/** *//**
* 查询所有记录数
* @param hql 查询的条件
* @return 总记录数
*/
public int getAllRowCount(String hql);
}
2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下:
public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
//省略了其他的代码
/** *//**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return
*/
public List queryForPage(final String hql,final int offset,final int length){
List list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException,SQLException{
Query query = session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}
/** *//**
* 查询所有记录数
* @return 总记录数
*/
public int getAllRowCount(String hql){
return getHibernateTemplate().find(hql).size();
}
}
3、下面我们来新建一个保存分页信息的类PageBean,具体代码如下:
public class PageBean {
private List list; //要返回的某一页的记录列表
private int allRow; //总记录数
private int totalPage; //总页数
private int currentPage; //当前页
private int pageSize; //每页记录数
private boolean isFirstPage; //是否为第一页
private boolean isLastPage; //是否为最后一页
private boolean hasPreviousPage; //是否有前一页
private boolean hasNextPage; //是否有下一页
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
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;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/** *//**
* 初始化分页信息
*/
public void init(){
this.isFirstPage = isFirstPage();
this.isLastPage = isLastPage();
this.hasPreviousPage = isHasPreviousPage();
this.hasNextPage = isHasNextPage();
}
/** *//**
* 以下判断页的信息,只需getter方法(is方法)即可
* @return
*/
public boolean isFirstPage() {
return currentPage == 1; // 如是当前页是第1页
}
public boolean isLastPage() {
return currentPage == totalPage; //如果当前页是最后一页
}
public boolean isHasPreviousPage() {
return currentPage != 1; //只要当前页不是第1页
}
public boolean isHasNextPage() {
return currentPage != totalPage; //只要当前页不是最后1页
}
/** *//**
* 计算总页数,静态方法,供外部直接通过类名调用
* @param pageSize 每页记录数
* @param allRow 总记录数
* @return 总页数
*/
public static int countTotalPage(final int pageSize,final int allRow){
int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
return totalPage;
}
/** *//**
* 计算当前页开始记录
* @param pageSize 每页记录数
* @param currentPage 当前第几页
* @return 当前页开始记录号
*/
public static int countOffset(final int pageSize,final int currentPage){
final int offset = pageSize*(currentPage-1);
return offset;
}
/** *//**
* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
* @param page 传入的参数(可能为空,即0,则返回1)
* @return 当前页
*/
public static int countCurrentPage(int page){
final int curPage = (page==0?1:page);
return curPage;
}
}
4、Service层接口的设计:
public interface MemberService {
//省略其他的代码
/** *//**
* 分页查询
* @param currentPage 当前第几页
* @param pageSize 每页大小
* @return 封闭了分页信息(包括记录集list)的Bean
*/
public PageBean queryForPage(int pageSize,int currentPage);
}
5、Service层实现类的部分内码如下:
public class MemberServiceImpl implements MemberService {
//通过applicationContext.xml配置文件注入MemberDao的值
private MemberDao memberDao;
public void setMemberDao(MemberDao memberDao) {
this.memberDao = memberDao;
}
/** *//**
* 分页查询
* @param currentPage 当前第几页
* @param pageSize 每页大小
* @return 封闭了分页信息(包括记录集list)的Bean
*/
public PageBean queryForPage(int pageSize,int page){
final String hql = "from Member"; //查询语句
int allRow = memberDao.getAllRowCount(hql); //总记录数
int totalPage = PageBean.countTotalPage(pageSize, allRow); //总页数
final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录
final int length = pageSize; //每页记录数
final int currentPage = PageBean.countCurrentPage(page);
List<Member> list = memberDao.queryForPage(hql,offset, length); //"一页"的记录
//把分页信息保存到Bean中
PageBean pageBean = new PageBean();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.init();
return pageBean;
}
6、在Struts2中调用queryForPageMemberService层的queryForPage()方法即可return一个包含分页信息、符合条件的结果集list, 代码如下:
public class ListMember extends ActionSupport{
//通过applicationContext.xml配置文件注入memberService的值
private MemberService memberService;
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
private int page; //第几页
private PageBean pageBean; //包含分布信息的bean
public int getPage() {
return page;
}
public void setPage(int page) { //若URL中无此参数,会默认为第1页
this.page = page;
}
public PageBean getPageBean() {
return pageBean;
}
public void setPageBean(PageBean pageBean) {
this.pageBean = pageBean;
}
@Override
public String execute() throws Exception {
//分页的pageBean,参数pageSize表示每页显示记录数,page为当前页
this.pageBean = memberService.queryForPage(2, page);
return SUCCESS;
}
}
7、最后在listMember.jsp页面中,用到了Struts2标签:
<s:iterator value="pageBean.list">
<s:property value="title"/>
<a href="getArticle.action?id=<s:property value="id"/>">modify</a>
<a href="deleteArticle.action?id=<s:property value="id"/>" onclick="return askDel()"/>delete</a><br/>
</s:iterator>
共<s:property value="pageBean.allRow"/> 条记录
共<s:property value="pageBean.totalPage"/> 页
当前第<s:property value="pageBean.currentPage"/>页<br/>
<s:if test="%{pageBean.currentPage == 1}">
第一页 上一页
</s:if>
<s:else>
<a href="listMyArticle.action?page=1">第一页</a>
<a href="listMyArticle.action?page=<s:property value="%{pageBean.currentPage-1}"/>">上一页</a>
</s:else>
<s:if test="%{pageBean.currentPage != pageBean.totalPage}">
<a href="listMyArticle.action?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页</a>
<a href="listMyArticle.action?page=<s:property value="pageBean.totalPage"/>">最后一页</a>
</s:if>
<s:else>
下一页 最后一页
</s:else>
兄弟 贴一下代码 学下一下呀!
public interface MemberDao{
//省略了其他的代码
/** *//**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return
*/
public List queryForPage(final String hql,final int offset,final int length);
/** *//**
* 查询所有记录数
* @param hql 查询的条件
* @return 总记录数
*/
public int getAllRowCount(String hql);
}
2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下:
public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
//省略了其他的代码
/** *//**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return
*/
public List queryForPage(final String hql,final int offset,final int length){
List list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException,SQLException{
Query query = session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}
/** *//**
* 查询所有记录数
* @return 总记录数
*/
public int getAllRowCount(String hql){
return getHibernateTemplate().find(hql).size();
}
}
3、下面我们来新建一个保存分页信息的类PageBean,具体代码如下:
public class PageBean {
private List list; //要返回的某一页的记录列表
private int allRow; //总记录数
private int totalPage; //总页数
private int currentPage; //当前页
private int pageSize; //每页记录数
private boolean isFirstPage; //是否为第一页
private boolean isLastPage; //是否为最后一页
private boolean hasPreviousPage; //是否有前一页
private boolean hasNextPage; //是否有下一页
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
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;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/** *//**
* 初始化分页信息
*/
public void init(){
this.isFirstPage = isFirstPage();
this.isLastPage = isLastPage();
this.hasPreviousPage = isHasPreviousPage();
this.hasNextPage = isHasNextPage();
}
/** *//**
* 以下判断页的信息,只需getter方法(is方法)即可
* @return
*/
public boolean isFirstPage() {
return currentPage == 1; // 如是当前页是第1页
}
public boolean isLastPage() {
return currentPage == totalPage; //如果当前页是最后一页
}
public boolean isHasPreviousPage() {
return currentPage != 1; //只要当前页不是第1页
}
public boolean isHasNextPage() {
return currentPage != totalPage; //只要当前页不是最后1页
}
/** *//**
* 计算总页数,静态方法,供外部直接通过类名调用
* @param pageSize 每页记录数
* @param allRow 总记录数
* @return 总页数
*/
public static int countTotalPage(final int pageSize,final int allRow){
int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
return totalPage;
}
/** *//**
* 计算当前页开始记录
* @param pageSize 每页记录数
* @param currentPage 当前第几页
* @return 当前页开始记录号
*/
public static int countOffset(final int pageSize,final int currentPage){
final int offset = pageSize*(currentPage-1);
return offset;
}
/** *//**
* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
* @param page 传入的参数(可能为空,即0,则返回1)
* @return 当前页
*/
public static int countCurrentPage(int page){
final int curPage = (page==0?1:page);
return curPage;
}
}
4、Service层接口的设计:
public interface MemberService {
//省略其他的代码
/** *//**
* 分页查询
* @param currentPage 当前第几页
* @param pageSize 每页大小
* @return 封闭了分页信息(包括记录集list)的Bean
*/
public PageBean queryForPage(int pageSize,int currentPage);
}
5、Service层实现类的部分内码如下:
public class MemberServiceImpl implements MemberService {
//通过applicationContext.xml配置文件注入MemberDao的值
private MemberDao memberDao;
public void setMemberDao(MemberDao memberDao) {
this.memberDao = memberDao;
}
/** *//**
* 分页查询
* @param currentPage 当前第几页
* @param pageSize 每页大小
* @return 封闭了分页信息(包括记录集list)的Bean
*/
public PageBean queryForPage(int pageSize,int page){
final String hql = "from Member"; //查询语句
int allRow = memberDao.getAllRowCount(hql); //总记录数
int totalPage = PageBean.countTotalPage(pageSize, allRow); //总页数
final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录
final int length = pageSize; //每页记录数
final int currentPage = PageBean.countCurrentPage(page);
List<Member> list = memberDao.queryForPage(hql,offset, length); //"一页"的记录
//把分页信息保存到Bean中
PageBean pageBean = new PageBean();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.init();
return pageBean;
}
6、在Struts2中调用queryForPageMemberService层的queryForPage()方法即可return一个包含分页信息、符合条件的结果集list, 代码如下:
public class ListMember extends ActionSupport{
//通过applicationContext.xml配置文件注入memberService的值
private MemberService memberService;
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
private int page; //第几页
private PageBean pageBean; //包含分布信息的bean
public int getPage() {
return page;
}
public void setPage(int page) { //若URL中无此参数,会默认为第1页
this.page = page;
}
public PageBean getPageBean() {
return pageBean;
}
public void setPageBean(PageBean pageBean) {
this.pageBean = pageBean;
}
@Override
public String execute() throws Exception {
//分页的pageBean,参数pageSize表示每页显示记录数,page为当前页
this.pageBean = memberService.queryForPage(2, page);
return SUCCESS;
}
}
7、最后在listMember.jsp页面中,用到了Struts2标签:
<s:iterator value="pageBean.list">
<s:property value="title"/>
<a href="getArticle.action?id=<s:property value="id"/>">modify</a>
<a href="deleteArticle.action?id=<s:property value="id"/>" onclick="return askDel()"/>delete</a><br/>
</s:iterator>
共<s:property value="pageBean.allRow"/> 条记录
共<s:property value="pageBean.totalPage"/> 页
当前第<s:property value="pageBean.currentPage"/>页<br/>
<s:if test="%{pageBean.currentPage == 1}">
第一页 上一页
</s:if>
<s:else>
<a href="listMyArticle.action?page=1">第一页</a>
<a href="listMyArticle.action?page=<s:property value="%{pageBean.currentPage-1}"/>">上一页</a>
</s:else>
<s:if test="%{pageBean.currentPage != pageBean.totalPage}">
<a href="listMyArticle.action?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页</a>
<a href="listMyArticle.action?page=<s:property value="pageBean.totalPage"/>">最后一页</a>
</s:if>
<s:else>
下一页 最后一页
</s:else>
评论
16 楼
qingfeng_101
2010-12-25
呵呵 我也有个分页的东东 是个JavaBean+JSP标签的 使用起来很方便的哦 有空去看看吧
15 楼
xiaoye4188
2010-08-02
chrisx 写道
我的个人组件包中关于分页是这么实现的
DAO: 使用的是我写的基于Spring, Hibernate的HibernateSupport再度封装了的泛型Dao,基于criteria查询,自己的DAO中只需要写组装条件。
Service, Action: 不用多说。
Web: 使用jsp自定义标签+jQuery实现通用分页工具栏与查询列表显示
DAO: 使用的是我写的基于Spring, Hibernate的HibernateSupport再度封装了的泛型Dao,基于criteria查询,自己的DAO中只需要写组装条件。
Service, Action: 不用多说。
Web: 使用jsp自定义标签+jQuery实现通用分页工具栏与查询列表显示
兄弟 贴一下代码 学下一下呀!
14 楼
chrisx
2010-06-21
我的个人组件包中关于分页是这么实现的
DAO: 使用的是我写的基于Spring, Hibernate的HibernateSupport再度封装了的泛型Dao,基于criteria查询,自己的DAO中只需要写组装条件。
Service, Action: 不用多说。
Web: 使用jsp自定义标签+jQuery实现通用分页工具栏与查询列表显示
DAO: 使用的是我写的基于Spring, Hibernate的HibernateSupport再度封装了的泛型Dao,基于criteria查询,自己的DAO中只需要写组装条件。
Service, Action: 不用多说。
Web: 使用jsp自定义标签+jQuery实现通用分页工具栏与查询列表显示
13 楼
wulinshishen
2010-05-24
都是厉害的人物啊
12 楼
maike
2010-03-12
进来看下struts2的
11 楼
jsd117
2010-03-11
我要好好看看。
10 楼
storm0912
2010-01-27
Springside 的分页就很好
9 楼
srj2903
2010-01-26
转被人的代码。
8 楼
z95001188
2010-01-26
代码太差劲了
7 楼
sunrisetg
2010-01-26
上传个附件!
6 楼
ivan18248
2010-01-26
wangyan2009 写道1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法: public interface MemberDao{ //省略了其他的代码 /** *//** * 分页查询 * @param hql 查询的条件 * @param offset 开始记录 * @param length 一次查询几条记录 * @return */ public List queryForPage(final String hql,final int offset,final int length); /** *//** * 查询所有记录数 * @param hql 查询的条件 * @return 总记录数 */ public int getAllRowCount(String hql); } 2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下: public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao { //省略了其他的代码 /** *//** * 分页查询 * @param hql 查询的条件 * @param offset 开始记录 * @param length 一次查询几条记录 * @return */ public List queryForPage(final String hql,final int offset,final int length){ List list = getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException,SQLException{ Query query = session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length); List list = query.list(); return list; } }); return list; } /** *//** * 查询所有记录数 * @return 总记录数 */ public int getAllRowCount(String hql){ return getHibernateTemplate().find(hql).size(); } } 3、下面我们来新建一个保存分页信息的类PageBean,具体代码如下: public class PageBean { private List list; //要返回的某一页的记录列表 private int allRow; //总记录数 private int totalPage; //总页数 private int currentPage; //当前页 private int pageSize; //每页记录数 private boolean isFirstPage; //是否为第一页 private boolean isLastPage; //是否为最后一页 private boolean hasPreviousPage; //是否有前一页 private boolean hasNextPage; //是否有下一页 public List getList() { return list; } public void setList(List list) { this.list = list; } 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; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } /** *//** * 初始化分页信息 */ public void init(){ this.isFirstPage = isFirstPage(); this.isLastPage = isLastPage(); this.hasPreviousPage = isHasPreviousPage(); this.hasNextPage = isHasNextPage(); } /** *//** * 以下判断页的信息,只需getter方法(is方法)即可 * @return */ public boolean isFirstPage() { return currentPage == 1; // 如是当前页是第1页 } public boolean isLastPage() { return currentPage == totalPage; //如果当前页是最后一页 } public boolean isHasPreviousPage() { return currentPage != 1; //只要当前页不是第1页 } public boolean isHasNextPage() { return currentPage != totalPage; //只要当前页不是最后1页 } /** *//** * 计算总页数,静态方法,供外部直接通过类名调用 * @param pageSize 每页记录数 * @param allRow 总记录数 * @return 总页数 */ public static int countTotalPage(final int pageSize,final int allRow){ int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1; return totalPage; } /** *//** * 计算当前页开始记录 * @param pageSize 每页记录数 * @param currentPage 当前第几页 * @return 当前页开始记录号 */ public static int countOffset(final int pageSize,final int currentPage){ final int offset = pageSize*(currentPage-1); return offset; } /** *//** * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替 * @param page 传入的参数(可能为空,即0,则返回1) * @return 当前页 */ public static int countCurrentPage(int page){ final int curPage = (page==0?1:page); return curPage; } } 4、Service层接口的设计: public interface MemberService { //省略其他的代码 /** *//** * 分页查询 * @param currentPage 当前第几页 * @param pageSize 每页大小 * @return 封闭了分页信息(包括记录集list)的Bean */ public PageBean queryForPage(int pageSize,int currentPage); } 5、Service层实现类的部分内码如下: public class MemberServiceImpl implements MemberService { //通过applicationContext.xml配置文件注入MemberDao的值 private MemberDao memberDao; public void setMemberDao(MemberDao memberDao) { this.memberDao = memberDao; } /** *//** * 分页查询 * @param currentPage 当前第几页 * @param pageSize 每页大小 * @return 封闭了分页信息(包括记录集list)的Bean */ public PageBean queryForPage(int pageSize,int page){ final String hql = "from Member"; //查询语句 int allRow = memberDao.getAllRowCount(hql); //总记录数 int totalPage = PageBean.countTotalPage(pageSize, allRow); //总页数 final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录 final int length = pageSize; //每页记录数 final int currentPage = PageBean.countCurrentPage(page); List<Member> list = memberDao.queryForPage(hql,offset, length); //"一页"的记录 //把分页信息保存到Bean中 PageBean pageBean = new PageBean(); pageBean.setPageSize(pageSize); pageBean.setCurrentPage(currentPage); pageBean.setAllRow(allRow); pageBean.setTotalPage(totalPage); pageBean.setList(list); pageBean.init(); return pageBean; } 6、在Struts2中调用queryForPageMemberService层的queryForPage()方法即可return一个包含分页信息、符合条件的结果集list, 代码如下: public class ListMember extends ActionSupport{ //通过applicationContext.xml配置文件注入memberService的值 private MemberService memberService; public void setMemberService(MemberService memberService) { this.memberService = memberService; } private int page; //第几页 private PageBean pageBean; //包含分布信息的bean public int getPage() { return page; } public void setPage(int page) { //若URL中无此参数,会默认为第1页 this.page = page; } public PageBean getPageBean() { return pageBean; } public void setPageBean(PageBean pageBean) { this.pageBean = pageBean; } @Override public String execute() throws Exception { //分页的pageBean,参数pageSize表示每页显示记录数,page为当前页 this.pageBean = memberService.queryForPage(2, page); return SUCCESS; } } 7、最后在listMember.jsp页面中,用到了Struts2标签: <s:iterator value="pageBean.list"> <s:property value="title"/> <a href="getArticle.action?id=<s:property value="id"/>">modify</a> <a href="deleteArticle.action?id=<s:property value="id"/>" onclick="return askDel()"/>delete</a><br/> </s:iterator> 共<s:property value="pageBean.allRow"/> 条记录 共<s:property value="pageBean.totalPage"/> 页 当前第<s:property value="pageBean.currentPage"/>页<br/> <s:if test="%{pageBean.currentPage == 1}"> 第一页 上一页 </s:if> <s:else> <a href="listMyArticle.action?page=1">第一页</a> <a href="listMyArticle.action?page=<s:property value="%{pageBean.currentPage-1}"/>">上一页</a> </s:else> <s:if test="%{pageBean.currentPage != pageBean.totalPage}"> <a href="listMyArticle.action?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页</a> <a href="listMyArticle.action?page=<s:property value="pageBean.totalPage"/>">最后一页</a> </s:if> <s:else> 下一页 最后一页 </s:else>
5 楼
sing4j
2010-01-26
楼主的这个不是特别好,一楼的支持一下
4 楼
zcq100
2010-01-26
稍微复杂了,还可以再简
3 楼
scd01234
2010-01-26
赞同楼主做法。用spring 的 JdbcDaoSupport直接用SQL分页不是更快捷,方便?
2 楼
dmewy
2010-01-26
通过hibernate分页还是很方便的..
1 楼
風一樣的男子
2010-01-26
我也发发我的SSH分页
dao 方法:
Service 方法:
分页类:
Action 代码:
BaseAction
分页导航:
dao 方法:
/** * get appCodes by Pagination * * @param appCode * @param pagination */ @SuppressWarnings("unchecked") public Pagination getAppCodes(final AppCode appCode, final Pagination pagination) { HibernateCallback callback = new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { int totalRow = 0; List<AppCode> objList = new ArrayList<AppCode>(); try { Criteria criteria = session.createCriteria(AppCode.class); // 只查状态有效的 criteria.add(Restrictions.eq("status", CConstants.VALID)); totalRow = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult(); criteria.setProjection(null); pagination.setTotalRow(totalRow); objList = criteria.addOrder(Order.asc("category")).addOrder(Order.asc("codeId")).setFirstResult(pagination.getStartRow()).setMaxResults(pagination.getPageSize()).list(); pagination.setObjList(objList); } catch (Exception e) { log.error("uh oh, getappCodes by Pagination failed..."); e.printStackTrace(); } return pagination; } }; return (Pagination) getHibernateTemplate().execute(callback); }
Service 方法:
/** * get appCodes by Pagination * @param appCode * @param pagination */ public Pagination getAppCodes(AppCode appCode, Pagination pagination) { return appCodeDao.getAppCodes(appCode, pagination); } /** * get appCodes by Pagination for Flex * @param map * @param pagination */ public Pagination query(Map<String, String> map, Pagination pagination) { if (map.isEmpty()) { return getAppCodes(new AppCode(), pagination); } AppCode appCode = new AppCode(); if (StringUtils.isNotEmpty(map.get("id"))) { appCode.setId(map.get("id")); } if (StringUtils.isNotEmpty(map.get("codeId"))) { appCode.setCodeId(map.get("codeId")); } if (StringUtils.isNotEmpty(map.get("codeName"))) { appCode.setCodeName(map.get("codeName")); } if (StringUtils.isNotEmpty(map.get("category"))) { appCode.setCategory(map.get("category")); } if (StringUtils.isNotEmpty(map.get("categoryDesc"))) { appCode.setCategoryDesc(map.get("categoryDesc")); } if (StringUtils.isNotEmpty(map.get("description"))) { appCode.setDescription(map.get("description")); } if (StringUtils.isNotEmpty(map.get("status"))) { appCode.setStatus(map.get("status")); } if (StringUtils.isNotEmpty(map.get("createDate"))) { appCode.setCreateDate(DateTypeConverter.convertFromString(map.get("createDate"))); } return getAppCodes(appCode, pagination); }
分页类:
public class Pagination { /** 当前页 */ private int currentPage = 1; /** 每页显示数 */ private int pageSize = CConstants.PAGE_SIZE; /** 总行数 */ private int totalRow = 0; /** 页码 List */ private List<Integer> pages = new ArrayList<Integer>(); /** 总页数 */ private int totalPage; /** 当前页在数据库中的起始行 */ private int startRow=0; /** 查询参数保存 javabean的形式 */ private Object queryObject ; /** 要显示的数据集 */ private List objList; public Pagination() { } public Pagination(int currentPage, int pageSize, int totalRow) { this.currentPage = currentPage; this.pageSize = pageSize; this.totalRow = totalRow; } public Pagination(int pageSize) { this.pageSize = pageSize; this.currentPage = 1; this.totalRow = 1; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { if (currentPage==0) { return; } this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalRow() { return totalRow; } public void setTotalRow(int totalRow) { this.totalRow = totalRow; } public int getStartRow() { if (this.currentPage > 1) { this.startRow = (this.currentPage - 1) * this.pageSize; } else { this.startRow = 0; } return startRow; } public void setStartRow(int startRow) { this.startRow = startRow; } public List<Integer> getPages() { this.pages.clear(); for (int i = 0; i < this.totalPage; i++) { try { this.pages.add((i+1)); } catch (Exception e) { e.printStackTrace(); } } return pages; } public void setPages(List<Integer> pages) { this.pages = pages; } public Object getQueryObject() { return queryObject; } public void setQueryObject(Object queryObject) { this.queryObject = queryObject; } public List getObjList() { return objList; } public void setObjList(List objList) { this.objList = objList; } public int getTotalPage() { this.totalPage = this.totalRow / this.pageSize; if (this.totalRow % this.pageSize != 0) { this.totalPage += 1; } return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } }
Action 代码:
@SuppressWarnings("serial") public class AppCodeAction extends BaseAction{ @Resource(name="appCodeService") private AppCodeService appCodeService; private AppCode appCode; public AppCode getAppCode() { return appCode; } public void setAppCode(AppCode appCode) { this.appCode = appCode; } public String query() { if (LOG.isDebugEnabled()) { LOG.debug("Entering query method..."); } if (this.pagination == null) { this.pagination = new Pagination(CConstants.PAGE_SIZE); } if (this.appCode == null) { this.appCode = new AppCode(); } try{ this.pagination = appCodeService.getAppCodes(appCode, pagination); }catch (Exception e) { addActionError(getText("search.exception", new String []{getText("AppCode")})); return ERROR; } return SUCCESS; } }
BaseAction
import com.opensymphony.xwork2.ActionSupport; import com.tjsoft.util.Pagination; @SuppressWarnings("serial") public class BaseAction extends ActionSupport { /** 分页类 */ protected Pagination pagination; public Pagination getPagination() { return pagination; } public void setPagination(Pagination pagination) { this.pagination = pagination; } public String preAdd(){ if (LOG.isDebugEnabled()) { LOG.debug("preAdd query method..."); } return INPUT; } }
分页导航:
<%@ page contentType="text/html; charset=UTF-8"%> <%@ include file="/pages/taglibs.jsp" %> <s:if test="#request.pagination.totalPage>0"> <div class="pageDiv" id="pageDiv"> <!-- 总记录数 <span>${pagination.totalRow}</span>--> <!-- 当前页/总页数 <span>${pagination.currentPage}/${pagination.totalPage}</span>--> <!-- 当前页不是第一页时生成首页和上一页 --> <c:if test="${pagination.currentPage>1}"> <span onclick="doPage('1')"><a>首页</a></span> <span onclick="doPage('pre')"><a>« 上一页</a></span> </c:if> <!-- 计算要分几次显示页码,每次显示10页 --> <c:choose> <c:when test="${pagination.totalPage %10 > 0}"> <c:set var="count" value="${pagination.totalPage/pagination.pageSize+1}" /> </c:when> <c:otherwise> <c:set var="count" value="${pagination.totalPage/pagination.pageSize}" /> </c:otherwise> </c:choose> <!-- count > 1 --> <c:choose> <c:when test="${count - 1 > 1}"> <!-- 1~10页先生成 --> <label id="p_1" class="cruLabel"> <c:forEach var="p" begin="1" end="10"> <span onclick="doPage('${p}')" <c:if test="${p==pagination.currentPage}">class='selected'</c:if>><a>${p}</a></span> </c:forEach> <span onclick="doPageLabel('p_2')"><a> »</a></span> </label> <c:forEach var="index" begin="2" end="${count}"> <label id="p_${index}" class="hideLabel"> <span onclick="doPageLabel('p_${index-1}')"><a>« </a></span> <c:forEach items="${pagination.pages}" var="page" begin="${(index-1)*pagination.pageSize}" end="${index*pagination.pageSize-1}"> <c:if test="${page>10}"> <span onclick="doPage('${page}')" <c:if test="${page==pagination.currentPage}">class='selected'</c:if>><a>${page}</a></span> </c:if> </c:forEach> <c:if test="${count - index > 1}"> <span onclick="doPageLabel('p_${index+1}')"><a> »</a></span> </c:if> </label> </c:forEach> </c:when> <c:otherwise> <c:forEach items="${pagination.pages}" var="page"> <span onclick="doPage('${page}')" <c:if test="${page==pagination.currentPage}">class='selected'</c:if>><a>${page}</a></span> </c:forEach> </c:otherwise> </c:choose> <!-- 当前页不是最后页时生成下一页 末页 --> <c:if test="${pagination.currentPage!=pagination.totalPage}"> <span onclick="doPage('next')"><a>下一页 »</a></span> <!-- <span onclick="doPage('${pagination.totalPage}')"><a>末页</a></span>--> </c:if> <!--<span>转到</span> <select id="to_p"> <c:forEach items="${pagination.pages}" var="tp"> <option value="${tp}" <c:if test="${tp eq pagination.currentPage}"> selected="selected" </c:if> >${tp}</option> </c:forEach> </select> <span>页</span> <span onclick="doPage(document.getElementById('to_p').value)">确定</span>--> </div> </s:if> <script type="text/javascript"> /*** 翻页*/ function doPage(page){ var form=document.forms[0]; if('${pagination.currentPage}'===page){ return; }else if("next"===page){ if('${pagination.currentPage}'=='${pagination.totalPage}')return; form.action='<s:url />?pagination.currentPage='+(new Number('${pagination.currentPage}')+1); }else if("pre"===page){ if('${pagination.currentPage}'==1)return; form.action='<s:url />?pagination.currentPage='+(new Number('${pagination.currentPage}')-1); }else { form.action='<s:url />?pagination.currentPage='+page; } form.submit(); } </script>
相关推荐
struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页
在这个"SSH整合分页Demo入门"中,我们将深入理解如何在SSH框架下实现数据的分页展示,这对于大型Web应用来说是非常重要的功能,能够有效地管理大量数据并提高用户体验。 首先,我们需要了解SSH框架的基础知识。...
在本项目中,“SSH整合分页”指的是如何在SSH框架集成的环境中实现高效且用户友好的数据分页功能。 分页是Web应用中必不可少的功能,尤其是在处理大量数据时,它能够帮助用户逐页浏览,提高用户体验并减轻服务器...
SSH整合、分页、附件上传下载以及国际化是四个在IT领域中常见的功能需求,尤其在Web应用开发中。下面将分别对这些知识点进行详细的解释。 首先,SSH整合指的是Spring、Struts2和Hibernate三大框架的集成。Spring是...
标题"ssh整合 简单分页"暗示了这个项目是关于如何在SSH框架下实现分页功能的。分页是Web应用中常见的需求,它允许用户以较小的数据块浏览大量信息,提高用户体验,减轻服务器负载。 分页通常涉及到以下几个关键步骤...
以下是一个简单的SSH整合分页实现步骤: ### 实验步骤 1. **创建数据库表**:根据提供的SQL脚本,创建了admin、book、category、guestbook和product五个表,用于存储不同类型的业务数据。 2. **配置SSH框架**:在...
阅读“Struts2.2+Hibernate3.3+Spring2.5.6整合CRUD.pdf”和“2.SSH基础上的分页功能的实现.pdf”将有助于深入理解SSH整合以及分页功能的实现。同时,“说明.txt”可能包含了项目运行的环境配置、启动指南或其他注意...
综上所述,SSH分页是Java企业级开发中的一个重要技术,它涉及到了Struts的控制层、Hibernate的数据访问层和Spring的整合及服务层,是提升应用性能和用户体验的关键手段之一。通过熟练掌握SSH分页,开发者可以更高效...
5. 示例中的"qimo_JavaWeb"可能是一个包含示例代码的文件或项目,它可能包含了SSH整合的配置文件、Java源代码、JSP视图文件以及相关的分页、校验和Ajax实现。对于初学者来说,研究这个示例可以帮助理解如何在实际...
SSH(Struts2 + Spring + Hibernate)是一个经典的Java Web开发框架,它整合了三大主流开源框架,用于构建高效、可维护性高的企业级应用程序。在这个"SSH实现分页实例"中,我们将深入探讨如何在SSH框架下实现数据的...
SSH2整合分页是Web开发中的一个重要概念,SSH2指的是Spring、Struts2和Hibernate这三个开源框架的组合,它们在Java Web开发中被广泛应用。在这个场景下,"整合"意味着将这三个框架集成到一个项目中,以实现高效、...
以下是对SSH整合开发中分页显示的详细说明。 首先,我们需要在DAO层定义分页查询的方法。在本例中,`MemberDao`接口有两个关键方法:`queryForPage`用于执行分页查询,`getAllRowCount`用于获取总记录数。`...
这个分页案例提供了使用SSH框架实现数据分页的功能,旨在帮助开发者更好地理解和应用这一技术。以下是对SSH框架分页案例的详细解读: 1. **Struts2**:作为MVC(Model-View-Controller)框架,Struts2负责处理HTTP...
SSH2(Spring、Struts2...通过深入研究这个项目,你可以理解如何在实际开发中整合这三个组件,以及如何在不同层面上实现分页功能。对于初学者,这是一个宝贵的实践案例,可以帮助他们更好地理解和掌握SSH2框架的使用。
在IT行业中,SSH和MySQL是两个非常重要的技术组件。...通过整合SSH框架和MySQL数据库,开发者可以构建出高效、响应式的Web应用。在实际项目中,还可以结合其他前端框架如Vue或React,进一步优化分页的实现和性能。
综上所述,实现"SSH+JSON+JQuery+Mysql"的Ajax分页,需要整合这些技术,完成前后端的交互。前端利用jQuery的AJAX发送请求,后端通过SSH框架处理请求,从MySQL数据库中获取分页数据,再以JSON格式返回。整个过程无需...
SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架,它整合了三大开源框架,为开发者提供了高效、简洁的开发环境。在这个名为"ssh.zip_SSH 数据分页_ssh分页实现"的压缩包中,我们可以看到一个关键...
下面将详细介绍SSH整合在分页和批量删除功能上的实现。 一、SSH整合中的分页 在大型系统中,为了提高用户体验和性能,通常需要对数据进行分页显示。在SSH框架中,分页主要由Struts和Hibernate协同完成。 1. **...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。...通过实践这个实例,你可以更深入地了解SSH框架的整合与数据库操作,为今后的项目开发打下坚实基础。
在这个实例中,我们将深入探讨SSH整合的实现过程,以及如何利用这些技术进行增删改查、分页和数据回显等常见操作。 首先,Spring作为核心的IOC(Inversion of Control)容器,管理着应用中的对象及其依赖关系。在...