当前位置:网站首页>自定义通用分页标签02
自定义通用分页标签02
2022-08-04 03:04:00 【一麟yl】
目录
上期我们已经把主要的准备工作搞定了。
那么接下来我们的任务就是自定义标签了 ,以及页面的数据显示部分了。
🧡首先,我们需要准备一个servlet
package com.ljq.mymvc.servlert;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ljq.mymvc.model.Student;
import com.ljq.mymvc.util.PageBean;
import com.ljq.mymvc.util.StudentDao;
/**
* 分页数据处理
*
* @author 一麟
*
*/
@WebServlet("/students")
public class StudentServlet extends HttpServlet {
private StudentDao dao = new StudentDao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PageBean pageBean = new PageBean();
pageBean.setRequest(req);// 给pageBean对象设置传入的参数
String sname = req.getParameter("sname");// 获取查询输入框的值
List<Student> students = dao.getStudents(sname, pageBean);// 根据输入框值和分页对象进行分页查询
req.setAttribute("students", students);// 将查询的学生传入页面
req.getRequestDispatcher("/student.jsp").forward(req, resp);// 转发到页面
}
}
然后,就是自定义标签助手类(PagingTag):
package com.ljq.mymvc.tag;
import java.io.IOException;
import java.util.Map;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.ljq.mymvc.util.PageBean;
/**
* 分页标签助手类
*
* @author 一麟
*
*/
public class PagingTag extends BodyTagSupport {
private PageBean pageBean;// 分页对象
public void setPageBean(PageBean pageBean) {
this.pageBean = pageBean;
}
/**
* 初始化
*/
@Override
public int doStartTag() {
JspWriter out = this.pageContext.getOut();
try {
out.println(buildHtml());
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
/**
* 将分页处理工具、搜索框的隐藏表单和js页面事件处理代码拼接起来
*
* @return
*/
private String buildHtml() {
// 分页处理工具
String pagingTool = "<div style=\"text-align: right; width:98%;\">\r\n" + " 第" + pageBean.getPage()
+ "页 \r\n" + " 共" + pageBean.getTotal() + "条记录 \r\n"
+ " <a href=\"javascript: goPage(1);\">首页</a> \r\n"
+ " <a href=\"javascript: goPage(" + pageBean.getPreviousPage()
+ ");\">上页</a> \r\n" + " <a href=\"javascript: goPage(" + pageBean.getNextPage()
+ ");\">下页</a> \r\n" + " <a href=\"javascript: goPage(" + pageBean.getTotalPage()
+ ");\">尾页</a> \r\n"
+ " 第<input type=\"text\" size=\"2\" id=\"pageNumber\" onkeypress=\"toPageNumber(event,this.value)\"/> \r\n"
+ " <a href=\"javascript: goPage(document.getElementById('pageNumber').value);\">GO</a>\r\n"
+ " </div>";
// 隐藏表单
String hiddenForm = "<form action='" + pageBean.getUrl() + "' id=\"pagingForm\" method=\"post\">"
+ "<input type=\"hidden\" name=\"page\" />";
Map<String, String[]> parameterMap = pageBean.getParameterMap();
// 循环所有的参数,并为所有的参数生成隐藏表单
for (Map.Entry<String, String[]> param : parameterMap.entrySet()) {
String paramName = param.getKey();
if ("page".equals(paramName))
continue;
String[] values = param.getValue();
for (String val : values) {
hiddenForm += "<input type='hidden' name='" + paramName + "' value='" + val + "'>";
}
}
hiddenForm += "</form>";
// 事件代码
String js = "<script>\r\n" + "function goPage(pageNum) {\r\n" + " debugger;\r\n"
+ " let form = document.getElementById(\"pagingForm\");\r\n" + " let lastPage = '"
+ pageBean.getTotalPage() + "';\r\n" + " if(pageNum > lastPage) pageNum = lastPage;\r\n"
+ " if(pageNum < 1) pageNum = 1;\r\n" + " form.page.value = pageNum;\r\n" + " form.submit();\r\n"
+ "}\r\n" + "\r\n" + "function toPageNumber(event,pn) {\r\n" + " //debugger;\r\n"
+ " if(event.keyCode == 13) {\r\n" + " let form = document.getElementById(\"pagingForm\");\r\n"
+ " form.page.value = pn;\r\n" + " form.submit();\r\n" + " }\r\n" + "}\r\n" + "</script>";
return pagingTool + hiddenForm + js;
}
}
我们可以发现在这个助手类中大量的进行网页元素的追加 ,没错,我们使用的助手类做的就是将页面中分页用到的元素进行封装。
编写完助手类之后我们需要在tag.tld文件中加入注册代码:
<tag>
<name>paging</name>
<tag-class>com.zking.ml.PagingTag</tag-class>
<body-content>empty</body-content>
<description>分页标签</description>
<attribute>
<name>pageBean</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
然后就能够在页面中使用分页标签了:
<%@taglib prefix="z" uri="/yilinyyds" %>
最后就是页面显示了
代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="z" uri="/yilinyyds" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>学生信息</h1>
<form action="<%=request.getContextPath()%>/student" method="post">
<input type="text" name="sname">
<input type="submit" value="查询">
</form>
<table border>
<tr>
<td>学生学号</td>
<td>学生姓名</td>
<td>学生年龄</td>
<td>学生地址</td>
</tr>
<c:forEach items="${students}" var="s">
<tr>
<td>${s.sid}</td>
<td>${s.sname}</td>
<td>${s.age}</td>
<td>${s.addr}</td>
</tr>
</c:forEach>
</table>
<z:paging pageBean="${pageBean}"/>
</center>
</body>
</html>
这样一来我们的分页标签就大功告成了。
效果图如下:
边栏推荐
猜你喜欢
Flink原理流程图简单记录
跨境电商看不到另一面:商家刷单、平台封号、黑灰产牟利
倒计时2天,“文化数字化战略新型基础设施暨文化艺术链生态建设发布会”启幕在即
一个属于程序员的七夕节!
new Date将字符串转化成日期格式 兼容IE,ie8如何通过new Date将字符串转化成日期格式,js中如何进行字符串替换, replace() 方法详解
2千兆光+6千兆电导轨式网管型工业级以太网交换机支持X-Ring冗余环网一键环网交换机
数据安全峰会2022 | 美创DSM获颁“数据安全产品能力验证计划”评测证书
STM8S105K4T6------串口发送和接收
第08章 索引的创建与设计原则【2.索引及调优篇】【MySQL高级】
new Date converts strings into date formats Compatible with IE, how ie8 converts strings into date formats through new Date, how to replace strings in js, and explain the replace() method in detail
随机推荐
案例 | 重庆银行流动数据安全挑战及应对实践
DIY电工维修如何拆卸和安装开关面板插座
2022广东省安全员A证第三批(主要负责人)考试题库及模拟考试
Utilities of Ruineng Micrometer Chip RN2026
Asynchronous programming solution Generator generator function, iterator iterator, async/await, Promise
【医保科普】维护医保基金安全,我们可以这样做
QNX Hypervisor 2.2 user manual] 10.1 gm vdev options
Mockito单元测试
哎,又跟HR在小群吵了一架!
Pine脚本 | 如何显示和排版绘图开关?
多线程间的通信方式你知道几种?
Countdown to 2 days, the "New Infrastructure of Cultural Digital Strategy and Ecological Construction of Cultural Art Chain" will kick off soon
一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
返回字符串中的最大回文数
验证码业务逻辑漏洞
Detailed analysis of scaffolding content
C语言--环形缓存区
[Playwright Test Tutorial] 5 minutes to get started
STM8S-----选项字节
Sfdp 超级表单开发平台 V6.0.5 正式发布