Servlet pager 封装分页控件

Servlet 目录:
Servlet pager 封装分页控件_第1张图片

web目录:
Servlet pager 封装分页控件_第2张图片

1、Person 实体类

package com.java.servlet.pager;

public class Person {
	private String id;
	private String name;
	private int age;
	private String sex;
	private String address;
	private String demo;
	
	public Person() {
	}
	
	public Person(String id, String name, int age, String sex, String address, String demo) {
		this();
		this.id = id;
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.address = address;
		this.demo = demo;
	}
	public Person(String id, String name, int age, String sex, String address) {
		this(id, name, age, sex, address, "");
	}
	public Person(String id, String name, int age, String sex) {
		this(id, name, age, sex, "");
	}
	
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getDemo() {
		return demo;
	}
	public void setDemo(String demo) {
		this.demo = demo;
	}
	
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", sex=" + sex + ", address=" + address + ", demo=" + demo
				+ "]";
	}
}

2、PagerServlet 模拟逻辑处理类

package com.java.servlet.pager;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

public class PagerServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@SuppressWarnings("unused")
	private void list(HttpServletRequest req, HttpServletResponse res) {
		List<Person> persons = new ArrayList<Person>();
		for (int i = 1; i < 30; i++) {
			persons.add(new Person(String.valueOf(i), "name_" + i, 10 + i, (i % 2 == 0 ? "男" : "女"), "address_" + i, "demo_" + i));
		}
		String name = req.getParameter("name");
		req.setAttribute("name", name);
		String sex = req.getParameter("sex");
		req.setAttribute("sex", sex);
		for (int j = 0; j < persons.size(); j++) {
			if (StringUtils.isNotEmpty(name) && !persons.get(j).getName().contains(name)) {
				persons.remove(j);
				j--;
				continue;
			}
			if (StringUtils.isNotEmpty(sex)) {
				if ("1".equals(sex) && "女".equals(persons.get(j).getSex())) {
					persons.remove(j);
					j--;
					continue;
				} else if ("2".equals(sex) && "男".equals(persons.get(j).getSex())) {
					persons.remove(j);
					j--;
					continue;
				}
			}
		}
		
		int curPage = req.getParameter("curPage") == null ? 1 : Integer.parseInt(req.getParameter("curPage"));
		if (curPage == 0) {
			curPage = 1;
			req.setAttribute("curPage", curPage);
		}
		
		int pageSize = 2;
		req.setAttribute("pageSize", pageSize);
		req.setAttribute("total", persons.size());
		req.setAttribute("curPage", curPage);
		if (persons.size() > 2) {
			int lastIdx = curPage * pageSize;
			if (lastIdx >= persons.size()) {
				lastIdx = persons.size();
			}
			persons = persons.subList((curPage - 1) * pageSize, lastIdx);
		}
		
		req.setAttribute("persons", persons);
		try {
			//res.sendRedirect("pager.jsp"); //重定向不能带requset参数
			req.getRequestDispatcher("pager.jsp").forward(req, res);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) {
		
		String methodName = req.getParameter("method");
		try {
			Method method = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
			method.setAccessible(true);
			method.invoke(this, req, resp);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

3、PagerTag Tag处理类

package com.java.servlet.pager;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;

public class PagerTag extends BodyTagSupport {

	private static final long serialVersionUID = -1848984466240909235L;
	
	private int total;
	private int pageSize;
	private int curPage;
	
	@Override
	public int doStartTag() throws JspException {
		
		if (pageSize == 0) {
			System.out.println("Page size 不能为空!");
			return Tag.SKIP_BODY;
		}
		
		//默认为第一页
		if (curPage == 0) {
			curPage = 1;
		}
		
		//没有分页时,设置为不可用
		String navDisableStyle = "";
		if (total == 0) {
			navDisableStyle = " disabled=\"disabled\"";
		}
		
		int pageNum = (int) Math.ceil((double)total / pageSize);
		System.out.println(pageNum);
		String forwardClass = "";
		if (curPage == pageNum) {
			forwardClass = "class='disabled'";
		}
		
		String backClass = "";
		if (curPage == 1) {
			backClass = "class='disabled'";
		}
		StringBuilder sb = new StringBuilder();
		sb.append("");
		
		sb.append("");
		try {
			this.pageContext.getOut().print(sb.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return Tag.SKIP_BODY;
		//return Tag.EVAL_BODY_INCLUDE; //执行标签中的内容
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getCurPage() {
		return curPage;
	}

	public void setCurPage(int curPage) {
		this.curPage = curPage;
	}
	
}

页面中有使用到Bootstrap中的一些样式,自行网上下载。

4、pager.tld 定义标签



<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>Show pager navigatordescription>
 <display-name>Pager navigatordisplay-name>
 <tlib-version>1.1tlib-version>
 <short-name>pshort-name>
 <uri>http://com.hsl.pager/coreuri>
 <tag>
 <name>pagername>
 <tag-class>com.java.servlet.pager.PagerTagtag-class>
 <body-content>emptybody-content>
 <attribute>
  <description>Data sizedescription>
  <name>totalname>
  <required>truerequired>
  <rtexprvalue>truertexprvalue>
 attribute>
 <attribute>
  <description>Page sizedescription>
  <name>pageSizename>
  <required>truerequired>
  <rtexprvalue>truertexprvalue>
 attribute>
 <attribute>
  <description>Current page numberdescription>
  <name>curPagename>
  <required>truerequired>
  <rtexprvalue>truertexprvalue>
 attribute>
 tag>
taglib>

5、web.xml 配置Servlet


<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name>display-name>
  
  <servlet>
    <servlet-name>PagerServletservlet-name>
    <servlet-class>com.java.servlet.pager.PagerServletservlet-class>
  servlet>
  	
  <servlet-mapping>
    <servlet-name>PagerServletservlet-name>
    <url-pattern>/pager.dourl-pattern>
  servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>pager.jspwelcome-file>
  welcome-file-list>
web-app>

6、pager.jsp 页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://com.hsl.pager/core" prefix="p" %>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>


<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'Pager.jsp' starting pagetitle>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css"
	href="./css/lib/bootstrap.min.css">
<link rel="stylesheet" type="text/css"
	href="./css/lib/bootstrap-theme.min.css">
<script type="text/javascript" src="./js/lib/jquery-3.3.1.js">script>
<script type="text/javascript" src="./js/lib/bootstrap.js">script>
head>
<body>
	<fieldset style="margin: 10px;">
		<legend>Person信息列表:legend>

		<form class="form-inline">
			<div class="form-group">
				<label for="name">姓名label> <input type="text"
					class="form-control" id="name" name="name" value="${name}" placeholder="请输入姓名:">
			div>
			<div class="form-group">
				<label for="sex">性别label>
				<select name="sex" id="sex" class="form-control" >
					<option value="0">option>
					<c:choose>
						<c:when test="${sex == '1'}">
							

页面中有使用到 jstl-api-1.2.jar 标准标签库,请自行下载。

7、跑出的页面效果如下

Servlet pager 封装分页控件_第3张图片

你可能感兴趣的:(java,Base)