基于SSM框架下的分页系统,根据视频学习的案例,这里可提供下载,方便研究。
下载链接:https://download.youkuaiyun.com/download/qq_33575618/10554497
ps:本文所写的项目为以前的项目进行修改,与案例项目不同,建议参考案例中的项目进行研究,案例中的SSM框架也是相对完善的。
首先需要用到自定义标签的使用。
1)页面文件标识
<!-- 自定义标签 -->
<%@ taglib prefix="itcast" uri="http://itcast.cn/common/"%>
2)定义工具类
NavigationTag.java
package util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 显示格式 上一页 1 2 3 4 5 下一页
*/
public class NavigationTag extends TagSupport {
static final long serialVersionUID = 2372405317744358833L;
/**
* request 中用于保存Page<E> 对象的变量名,默认为“page”
*/
private String bean = "page";
/**
* 分页跳转的url地址,此属性必须
*/
private String url = null;
/**
* 显示页码数量
*/
private int number = 5;
@Override
public int doStartTag() throws JspException {
JspWriter writer = pageContext.getOut();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
Page page = (Page) request.getAttribute(bean);
if (page == null)
return SKIP_BODY;
url = resolveUrl(url, pageContext);
try {
// 计算总页数
int pageCount = page.getTotal() / page.getSize();
if (page.getTotal() % page.getSize() > 0) {
pageCount++;
}
writer.print("<nav><ul class=\"pagination\">");
// 显示“上一页”按钮
if (page.getPage() > 1) {
String preUrl = append(url, "page", page.getPage() - 1);
preUrl = append(preUrl, "rows", page.getSize());
writer.print("<li><a href=\"" + preUrl + "\">上一页</a></li>");
} else {
writer.print("<li class=\"disabled\"><a href=\"#\">上一页</a></li>");
}
// 显示当前页码的前2页码和后两页码
// 若1 则 1 2 3 4 5, 若2 则 1 2 3 4 5, 若3 则1 2 3 4 5,
// 若4 则 2 3 4 5 6 ,若10 则 8 9 10 11 12
int indexPage = (page.getPage() - 2 > 0) ? page.getPage() - 2 : 1;
for (int i = 1; i <= number && indexPage <= pageCount; indexPage++, i++) {
if (indexPage == page.getPage()) {
writer.print("<li class=\"active\"><a href=\"#\">" + indexPage
+ "<span class=\"sr-only\">(current)</span></a></li>");
continue;
}
String pageUrl = append(url, "page", indexPage);
pageUrl = append(pageUrl, "rows", page.getSize());
writer.print("<li><a href=\"" + pageUrl + "\">" + indexPage + "</a></li>");
}
// 显示“下一页”按钮
if (page.getPage() < pageCount) {
String nextUrl = append(url, "page", page.getPage() + 1);
nextUrl = append(nextUrl, "rows", page.getSize());
writer.print("<li><a href=\"" + nextUrl + "\">下一页</a></li>");
} else {
writer.print("<li class=\"disabled\"><a href=\"#\">下一页</a></li>");
}
writer.print("</nav>");
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
private String append(String url, String key, int value) {
return append(url, key, String.valueOf(value));
}
/**
* 为url 参加参数对儿
*
* @param url
* @param key
* @param value
* @return
*/
private String append(String url, String key, String value) {
if (url == null || url.trim().length() == 0) {
return "";
}
if (url.indexOf("?") == -1) {
url = url + "?" + key + "=" + value;
} else {
if (url.endsWith("?")) {
url = url + key + "=" + value;
} else {
url = url + "&" + key + "=" + value;
}
}
return url;
}
/**
* 为url 添加翻页请求参数
*
* @param url
* @param pageContext
* @return
* @throws javax.servlet.jsp.JspException
*/
private String resolveUrl(String url, javax.servlet.jsp.PageContext pageContext) throws JspException {
// UrlSupport.resolveUrl(url, context, pageContext)
Map params = pageContext.getRequest().getParameterMap();
for (Object key : params.keySet()) {
if ("page".equals(key) || "rows".equals(key))
continue;
Object value = params.get(key);
if (value == null)
continue;
try {
if (value.getClass().isArray()) {
// 解决GET乱码问题
// value = new String(((String[])
// value)[0].getBytes("ISO-8859-1"), "UTF-8");
value = ((String[]) value)[0];
url = append(url, key.toString(), value.toString());
} else if (value instanceof String) {
// 解决GET乱码问题
// value = new String(((String)
// value).getBytes("ISO-8859-1"), "UTF-8");
value = (String) value;
url = append(url, key.toString(), value.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
return url;
}
/**
* @return the bean
*/
public String getBean() {
return bean;
}
/**
* @param bean
* the bean to set
*/
public void setBean(String bean) {
this.bean = bean;
}
/**
* @return the url
*/
public String getUrl() {
return url;
}
/**
* @param url
* the url to set
*/
public void setUrl(String url) {
this.url = url;
}
public void setNumber(int number) {
this.number = number;
}
}
Page.java
package util;
import java.util.List;
public class Page<T> {
/**
*
* @param total
* 查询数据总条数
* @param page
* 当前页码数
* @param size
* 每页显示数据条数
* @param rows
* 查询结果集
*/
private int total;
private int page;
private int size;
private List<T> rows;
public Page() {
super();
}
public Page(int total, int page, int size, List<T> rows) {
super();
this.total = total;
this.page = page;
this.size = size;
this.rows = rows;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public List<T> getRows() {
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
}
3)commons.tld
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>common</short-name>
<uri>http://itcast.cn/common/</uri>
<display-name>Common Tag</display-name>
<description>Common Tag library</description>
<tag>
<name>page</name>
<tag-class>util.NavigationTag</tag-class>
<body-content>JSP</body-content>
<description>create navigation for paging</description>
<attribute>
<name>bean</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>number</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
一:创建pojo成员变量
1)businesses.java
package number;
public class businesses {
private int ID;
private String boss_name;
private String business_name;
private String reward;
private String time;
private String number;
private String place;
private String add_time;
private boolean or_top;
private String reward_style;
private String business_detail;
@Override
public String toString() {
return "businesses [ID=" + ID + ", boss_name=" + boss_name + ", business_name=" + business_name + ", reward="
+ reward + ", time=" + time + ", number=" + number + ", place=" + place + ", add_time=" + add_time
+ ", or_top=" + or_top + ", reward_style=" + reward_style + ", business_detail=" + business_detail
+ "]";
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getBoss_name() {
return boss_name;
}
public void setBoss_name(String boss_name) {
this.boss_name = boss_name;
}
public String getBusiness_name() {
return business_name;
}
public void setBusiness_name(String business_name) {
this.business_name = business_name;
}
public String getReward() {
return reward;
}
public void setReward(String reward) {
this.reward = reward;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getPlace() {
return place;
}
public void setPlace(String place) {
this.place = place;
}
public String getAdd_time() {
return add_time;
}
public void setAdd_time(String add_time) {
this.add_time = add_time;
}
public boolean isOr_top() {
return or_top;
}
public void setOr_top(boolean or_top) {
this.or_top = or_top;
}
public String getReward_style() {
return reward_style;
}
public void setReward_style(String reward_style) {
this.reward_style = reward_style;
}
public String getBusiness_detail() {
return business_detail;
}
public void setBusiness_detail(String business_detail) {
this.business_detail = business_detail;
}
}
2)QueryVo.java(包含查询条件和分页数据)
package number;
public class QueryVo {
//根据兼职名查询
private String business_name;
// 当前页码数
private Integer page = 1;
// 数据库从哪一条数据开始查
private Integer start;
// 每页显示数据条数
private Integer rows = 10;
public String getBusiness_name() {
return business_name;
}
public void setBusiness_name(String business_name) {
this.business_name = business_name;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getStart() {
return start;
}
public void setStart(Integer start) {
this.start = start;
}
public Integer getRows() {
return rows;
}
public void setRows(Integer rows) {
this.rows = rows;
}
@Override
public String toString() {
return "QueryVo [business_name=" + business_name + ", page=" + page + ", start=" + start + ", rows=" + rows
+ "]";
}
}
二:实现Dao层
1)businessMapper.java
package mapper;
import java.util.List;
import number.QueryVo;
import number.businesses;
public interface businessMapper {
/**
* 分页查询所有兼职
* @return
*/
public List<businesses> Allbusiness(QueryVo vo);
/**
* 所有数据总记录数
* @return
*/
public Integer getCount(QueryVo vo);
/**
* 分页查询所有兼职根据兼职名
* @return
*/
public List<businesses> findByName(QueryVo vo);
/**
* 总记录数根据兼职名
* @return
*/
public Integer getCountByName(QueryVo vo);
}
2)businessMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.businessMapper">
<!-- 分页查询所有数据 -->
<select id="Allbusiness" parameterType="QueryVo" resultType="businesses">
select * from business order by add_time desc limit #{start}, #{rows};
</select>
<!-- 查询总记录数 -->
<select id="getCount" parameterType="QueryVo" resultType="int">
select count(*) from business
</select>
<!-- 分页根据兼职名查询 -->
<select id="findByName" parameterType="QueryVo" resultType="businesses">
select * from business
<where>
<if test="business_name != null and business_name != ''">
and business_name like '%${business_name}%'
</if>
</where>
order by add_time desc
limit #{start}, #{rows}
</select>
<!-- 根据兼职名查询得到的数据总数 -->
<select id="getCountByName" parameterType="QueryVo" resultType="int">
select count(*) from business where business_name like '%${business_name}%'
</select>
</mapper>
三:实现Service层
1)businessService.java
package service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import mapper.businessMapper;
import number.QueryVo;
import number.businesses;
import number.users;
import util.Page;
@Service
public class businessServiceimpl {
@Autowired
businessMapper businessmapper;
//分页查询
public Page<businesses> getUsersByPage(QueryVo vo){
//计算分页查询从哪条记录开始
vo.setStart((vo.getPage() - 1) * vo.getRows());
//查询总记录数
Integer total = businessmapper.getCount(vo);
//查询每页的数据列表
List<businesses> list = businessmapper.Allbusiness(vo);
//包装分页数据
Page<businesses> page = new Page<businesses>(total,vo.getPage(),vo.getRows(),list);
return page;
}
//分页查询根据兼职名
public Page<businesses> getBusinessByName(QueryVo vo){
//计算分页查询从哪条记录开始
vo.setStart((vo.getPage() - 1) * vo.getRows());
//查询总记录数
Integer total = businessmapper.getCountByName(vo);
//查询每页的数据列表
List<businesses> list = businessmapper.findByName(vo);
//包装分页数据
Page<businesses> page = new Page<businesses>(total,vo.getPage(),vo.getRows(),list);
// System.out.println("total:"+page.getTotal()+"page:"+page.getPage());
return page;
}
}
四:实现Controller
1)businessController.java
package controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import number.QueryVo;
import number.businesses;
import number.users;
import service.businessService;
import util.Page;
@Controller
public class businessController {
@Autowired
businessService businessservice;
@RequestMapping("Allbusinesses.do")
public String list(Model model,QueryVo vo,HttpServletResponse response,HttpServletRequest request) {
request.setAttribute("turn","turn");
//跟踪查询条件分页查询用户表
Page<businesses> page = businessservice.getUsersByPage(vo);
//设置分页数据返回
model.addAttribute("page",page);
//返回分页条件
model.addAttribute("vo",vo);
// System.out.println("All");
return "homePage";
}
@RequestMapping("findToThing.do")
public String listByName(Model model,QueryVo vo) {
//跟踪查询条件分页查询用户表
Page<businesses> page = businessservice.getBusinessByName(vo);
//设置分页数据返回
model.addAttribute("page",page);
//返回分页条件
model.addAttribute("vo",vo);
// System.out.println("ByName");
return "homePage2";
}
}