- 浏览: 33659 次
- 性别:
- 来自: 上海
文章分类
最新评论
springmvcstringhibernatesessionlist
分页主要需要两个参数:
1、当前页是第几页
2、每页展示多少条数据
先写一个类来封装处理这两个参数:
[java] view plaincopy
package com.smvc.annonation.utils;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class ResultFilter<T> implements Serializable{
private static final long serialVersionUID = 5472321653620726832L;
private final static int DEFAULT_NAVIGATOR_SIZE = 5;
//当前页
private int currentPage = 1;
//每页显示数量
private int pageSize = 5;
//总条数
private int totalCount;
private boolean havaNextPage;
private boolean havePrePage;
private int navigatorSize;
//存放查询结果用的list
private List<T> items;
public ResultFilter(){
}
public ResultFilter(int totalCount, int pageSize, int currentPage) {
this(totalCount, pageSize, currentPage, DEFAULT_NAVIGATOR_SIZE);
}
public ResultFilter(int totalCount, int pageSize, int currentPage,
int navigatorSize) {
this.totalCount = totalCount;
this.pageSize = pageSize;
this.currentPage = currentPage;
this.navigatorSize = navigatorSize;
}
public int getPageCount() {
int pageCount = 0;
if (pageSize != 0) {
pageCount = totalCount / pageSize;
if (totalCount % pageSize != 0)
pageCount++;
}
return pageCount;
}
public int getCurrentPage() {
currentPage = currentPage < getPageCount() ? currentPage :
getPageCount();
currentPage = currentPage < 1 ? 1 : currentPage;
return currentPage;
}
public int getPageSize() {
return pageSize;
}
public int getTotalCount() {
return totalCount;
}
public boolean isHaveNextPage() {
havaNextPage = false;
if ((getPageCount() > 1) && (getPageCount() > getCurrentPage()))
havaNextPage = true;
return havaNextPage;
}
public boolean isHavePrePage() {
havePrePage = false;
if ((getPageCount() > 1) && (currentPage > 1))
havePrePage = true;
return havePrePage;
}
private int getNavigatorIndex(boolean isBegin) {
int beginNavigatorIndex = getCurrentPage() - navigatorSize / 2;
int endNavigatorIndex = getCurrentPage() + navigatorSize / 2;
beginNavigatorIndex = beginNavigatorIndex < 1 ? 1 : beginNavigatorIndex;
endNavigatorIndex = endNavigatorIndex < getPageCount() ?
endNavigatorIndex :
getPageCount();
while ((endNavigatorIndex - beginNavigatorIndex) < navigatorSize &&
(beginNavigatorIndex != 1 || endNavigatorIndex != getPageCount())) {
if (beginNavigatorIndex > 1)
beginNavigatorIndex--;
else if (endNavigatorIndex < getPageCount())
endNavigatorIndex++;
}
if(isBegin)
return beginNavigatorIndex;
else
return endNavigatorIndex;
}
public int getBeginNavigatorIndex() {
return getNavigatorIndex(true);
}
public int getEndNavigatorIndex() {
return getNavigatorIndex(false);
}
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
接着,就要处理如何翻页的问题。解决方法就是在页面间传递参数,传递当前是第几页。
使用自己定义标签实现比较简便(由于现在只做了一个页面,并不能保证翻页功能的通用性,以后会慢慢完善)
自定义标签的配置:
my.tld
[html] view plaincopy
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>My Tag Library</description>
<tlib-version>1.0</tlib-version>
<short-name>my</short-name>
<uri>my-taglib</uri>
<tag>
<description>split page</description>
<name>paging</name>
<tag-class>com.smvc.annonation.tag.PagingTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>base href</description>
<name>href</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>curr page</description>
<name>curr</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>page size</description>
<name>size</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>total page</description>
<name>total</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>curr parameter name</description>
<name>cparam</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<description>page size parameter name</description>
<name>sparam</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<dynamic-attributes>false</dynamic-attributes>
</tag>
<tag>
<description>front split page</description>
<name>frontPaging</name>
<tag-class>com.aspire.cms.demo.framework.tag.FrontPagingTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>base href</description>
<name>href</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>result filter</description>
<name>rf</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<dynamic-attributes>false</dynamic-attributes>
</tag>
</taglib>
对应的java类:
[java] view plaincopy
package com.smvc.annonation.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import org.apache.commons.lang.StringUtils;
public class PagingTag extends SimpleTagSupport {
private String href;
//当前页
private String cparam;
//每页条数
private String sparam;
private int curr;//当前页
private int size;//每页条数
private int total;//总页数
@Override
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
if(StringUtils.isEmpty(cparam)) {
cparam = "currentPage";
}
if(StringUtils.isEmpty(sparam)) {
sparam = "pageSize";
}
if(!href.endsWith("?") && !href.endsWith("&")) {
if(href.indexOf("?") == -1) {
href = href + "?";
} else {
href = href + "&";
}
}
if (curr <= 0) {
curr = 1;
} else if (curr > total) {
curr = total;
}
out.append("<span>");
// 首页
if (curr == 1) {
out.append("首页");
} else {
href(out, href, 1, "首页");
}
out.append(" | ");
// 上一页
if (curr == 1) {
out.append("上一页");
} else {
href(out, href, curr - 1, "上一页");
}
out.append(" | ");
// 下一页
if (curr == total) {
out.append("下一页");
} else {
href(out, href, curr + 1, "下一页");
}
out.append(" | ");
// 末页
if (curr == total) {
out.append("末页");
} else {
href(out, href, total, "末页");
}
out.append("</span>");
out.append("<span>第");
out.append(curr + "/" + total);
out.append("页</span>");
super.doTag();
}
private void href(JspWriter out, String href, int curr, String title) throws IOException {
out.append("<a href=\"").append(href).append(cparam).append("=").append("" + curr).append("&").append(sparam).append("=").append("" + size).append("\">").append(title).append("</a>");
}
public int getCurr() {
return curr;
}
public void setCurr(int curr) {
this.curr = curr;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
public String getCparam() {
return cparam;
}
public void setCparam(String cparam) {
this.cparam = cparam;
}
public String getSparam() {
return sparam;
}
public void setSparam(String sparam) {
this.sparam = sparam;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
在jsp中使用自定义的标签库来实现翻页功能:
list.jsp
[javascript] view plaincopy
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ page session="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib uri="my-taglib" prefix="my"%>
<title>学生列表</title>
<form action="list" method="post">
<table>
<tr>
<td width="160">id</td>
<td width="160">姓名</td>
<td width="160">性别</td>
<td width="160">年龄</td>
<td width="160">生日</td>
</tr>
<c:forEach items="${rf.items}" var="student">
<tr>
<td><c:out value="${student.id}"/></td>
<td><c:out value="${student.name}"/></td>
<td><c:out value="${student.gender}"/></td>
<td><c:out value="${student.age}"/></td>
<td><fmt:formatDate value="${student.birthday}" type="both" pattern="yyyy-MM-dd"/></td>
</tr>
</c:forEach>
</table>
<my:paging curr="${rf.currentPage}" total="${rf.pageCount}" size="${rf.pageSize}" href="list"/>
</form>
controller中根据参数对ResultFilter进行设置:
[java] view plaincopy
@RequestMapping(value="/list")
public ModelAndView listStudent(@ModelAttribute ResultFilter<Student> rf){
studentService.listStudent(rf);
return new ModelAndView("list", "rf", rf);
}
service中的方法:
[java] view plaincopy
public void listStudent(ResultFilter<Student> rf){
rf.setTotalCount(getStudentCount());
rf.setItems(studentDao.getListForPage("from Student", (rf.getCurrentPage() - 1 )* rf.getPageSize(), rf.getPageSize()));
}
这个方法没有使用session,能支持多台服务器共同提供服务的情况。但是这个方法的效率可能有点低,因为每次翻页的时候都会重新创建一个ResultFilter,使用hibernate的缓存应该会使性能有所提高。
发表评论
-
js页面缓存的一个解决办法
2013-12-06 18:02 0CSSOSAnt浏览器JavaScript 由于 ... -
解决js缓存地址问题
2013-12-06 17:56 637解决js缓存地址问题 js实现不缓存 <ME ... -
URL URI URN
2013-12-06 17:51 594总结如下: 1.简写: URI (uniform resour ... -
URI和URL的区别
2013-12-06 17:47 647这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Jav ... -
display标签交替显示不同行颜色
2013-12-06 17:41 599问题 想要一个更加简单的支持列表数据分页和排序的方法。 解决方 ... -
display标签简介
2013-12-06 17:36 419下面是网友总结的displa ... -
jsp转换成html
2013-11-28 16:42 632相信很多人都希望自己的页面越快越好,最好是能静态的,提高 ... -
Java验证码
2013-11-28 15:11 411Java生成验证码图片 1.Servlet生成验证码图片 ... -
JAVA图片验证码
2013-11-28 15:08 508import java.awt.Color; ... -
缓存 SpringModules Cache ( spring 和 ehcache的整合 )
2013-11-25 12:44 976spring提供缓存bean方案 s ... -
基于注解的SpringMVC简单介绍
2013-11-15 13:26 565mvcspringSpringMVC注解简单用法 Sprin ... -
JSP、Servlet中的相对路径和绝对路径
2013-11-15 13:09 560http://www.webjx.com 更新日期:200 ... -
jsp相对路径绝对路径
2013-11-15 12:57 392jsp相对路径绝对路径 ... -
JSP自定义标签rtexprvalue属性
2013-11-15 11:28 395JSP自定义标签rtexprvalue属性 分类: J2EE ... -
EL表达式 参考手册
2013-11-14 17:29 315一、EL简介 1.语法结构 ${expression ... -
Spring MVC 教程,快速入门,深入分析
2013-11-14 16:26 1011Spring MVC 教程快速入门 资源下载: Spring_ ... -
spring mvc 给action添加事务不成功的原因
2013-11-14 16:16 1130spring springMVC ation事务管 ... -
springMVC+JDBC:分页示例
2013-11-13 15:30 860文章来源:http://liuzidong.iteye.c ... -
get/post时中文乱码问题的解决办法
2013-11-13 14:00 398jspurlservlettomcat浏览器服 ... -
SpringMVC深入总结--Spring中的拦截器
2013-11-05 12:50 1147Spring为我们提供了: org ...
相关推荐
在本文中,我们将深入探讨Spring MVC分页组件和JqGrid如何协同工作,实现高效的数据展示和导出功能。Spring MVC作为Java企业级应用的主流框架,提供了强大的MVC架构支持,而JqGrid则是一个功能丰富的jQuery插件,专...
总结,MySQL+Spring MVC实现分页涉及数据库分页原理、Spring MVC的分页支持、Spring Data JPA的便捷性、前端分页展示以及性能优化等多个方面。理解并熟练运用这些知识点,可以构建出高效且用户体验良好的Web应用。
1. **Spring MVC分页**: Spring MVC本身并不直接提供分页功能,但可以通过与Spring Data JPA或MyBatis等结合实现。Spring Data JPA中的`Pageable`接口和`Page`对象是分页的核心,它们允许我们在查询时指定分页参数,...
本篇文章将详细探讨如何基于Spring MVC实现分页查询,这对于任何处理大量数据的Web应用都是至关重要的。 首先,理解分页的基本概念。分页是将大型数据集划分为较小、更易管理的部分,以提高用户体验并减少服务器...
总结,Spring分页涉及到多个层次的配合,包括数据访问层(如Spring Data JPA)、业务逻辑层(如Spring MVC)以及视图层(如Thymeleaf)。理解并熟练掌握这些知识点,能帮助我们构建出高效、用户友好的分页系统。在...
本项目聚焦于如何在Spring MVC中集成EasyUI的Grid组件实现分页功能,这是一个常见的Web开发场景,对于提高用户体验和减轻服务器压力至关重要。 **Spring MVC** 是一个强大的MVC(Model-View-Controller)框架,它由...
但是,在参考写的同时也发现有很多地方都不解不能直接用的问题,导致实际使用的过程中经常会出错,参考原来做的项目,以及网上的资料,整理了一个比较简单的自己理解的spring+spring mvc+mybatis+mysql实现的分页的...
mybatis 3.1.1, spring-3.1.3 与 mybatis-spring -1.1.1 集成的 分页程序,以及spring MVC 例子. 没分了,收取一分,如果有和我一样穷的兄弟,你可以到我的博客上去下载,不需要积分:...
《Spring MVC与MYBatis企业应用实战》是一本深度探讨如何在实际企业环境中集成和运用Spring MVC和MYBatis两大主流技术的书籍。Spring MVC作为Spring框架的重要组成部分,是Java Web开发中的强大控制器,而MYBatis则...
总的来说,"spring+spring mvc+mybatis框架整合实现超市货物管理系统"是一个涵盖后端开发基础技能的项目,涉及了JavaEE的多个层面,从Web层的路由处理,到业务逻辑的实现,再到数据库操作,以及用户认证和分页显示等...
在实际项目中,Spring MVC + Ajax的组合可以应用于各种场景,如分页加载、下拉菜单联动、实时图表更新等。通过合理的架构设计和优化,我们可以构建出高性能、响应式的Web应用程序。 总之,Spring MVC提供了强大的...
在这个特定的场景下,我们讨论的是如何在Spring MVC中结合MyBatis实现分页功能。分页是Web应用中常见的需求,它能够帮助用户更有效地浏览大量数据,提高用户体验。 首先,Spring MVC 是一个轻量级的Java Web框架,...
对于翻页功能,Spring Data JPA提供Pageable接口和Page返回类型,可以方便地实现分页查询。 此外,为了展示数据,开发者会创建视图层的模板,通常是HTML页面,使用Thymeleaf或JSP等技术进行渲染。视图中可以通过...
**jQuery Spring MVC 整合详解** 在Web开发领域,jQuery 和 Spring MVC 分别是JavaScript库与后端MVC框架的代表。将两者结合使用,可以构建出高效、响应式的前端界面,同时利用Spring MVC的强大功能处理后端业务...
总的来说,本学习资源涵盖了Spring MVC 3的基础知识,包括注解驱动的控制器、数据库操作、数据分页、数据导入导出以及异常处理等重要概念。通过实践这些内容,你将能够构建出功能完备且健壮的Web应用程序。
**Spring MVC 整合 Mybatis 知识点详解** 在现代Java Web开发中,Spring MVC 和 Mybatis 是两个非常流行的框架。Spring MVC 提供了强大的MVC架构支持,而Mybatis则是一个轻量级的持久层框架,专注于SQL映射。将两者...
本项目着重讲解如何在Spring MVC环境中,结合JDBC技术,实现对Oracle数据库的分页查询功能,并通过Ajax进行动态加载,提升用户体验。此外,我们还将涉及LigerUI和jEditable两个前端库,以增强用户界面和交互性。 ...
在JavaWeb中,通常会使用JSP配合Servlet或者Spring MVC的ModelAndView对象来实现分页,同时需要数据库查询支持分页参数,如LIMIT和OFFSET。 3. **删除操作**:项目支持单个和批量删除功能。这需要在后台编写对应的...
4. **Ajax分页**:结合Spring MVC的ModelAndView或ResponseBody,实现无刷新的分页功能。 5. **错误处理**:Spring MVC可以返回错误码或自定义消息,jQuery接收到这些信息后可以显示相应的错误提示。 文件“spring...
Spring MVC、EasyUI和MyBatis是开发企业级Web应用的三大核心技术,广泛应用于网站后台管理系统的构建。这里我们将深入探讨这三个技术栈的核心概念、功能以及它们如何协同工作。 Spring MVC是Spring框架的一个模块,...