当前位置:网站首页>Custom paging tag 02 of JSP custom tag
Custom paging tag 02 of JSP custom tag
2022-07-28 12:40:00 【Champion_ me】
This chapter will continue the content of the previous chapter , Perfect custom paging labels , The last chapter is mainly about reconstruction - Extract common method , This chapter is mainly about encapsulating paging labels
Catalog
One 、 First of all JSP page
student.jsp
This page is paginated before label encapsulation
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> Student information </h1>
<form action="<%=request.getContextPath()%>/students" method="post">
<input type="text" name="sname">
<input type="submit" value=" Inquire about ">
</form>
<table border="1" style="width: 98%;">
<tr>
<td> Student number </td>
<td> full name </td>
<td> Age </td>
<td> remarks </td>
</tr>
<c:forEach items="${students}" var="student">
<tr>
<td>${student.sid}</td>
<td>${student.sname}</td>
<td>${student.score}</td>
<td>${student.clazz}</td>
</tr>
</c:forEach>
</table>
<div style="text-align: right; width:98%;">
The first ${pageBean.page} page
common ${pageBean.total} Bar record
<a href="javascript:goPage(1);"> home page </a>
<a href="javascript:goPage(${pageBean.previousPage});"> page-up key </a>
<a href="javascript:goPage(${pageBean.nextPage});"> next page </a>
<a href="javascript:goPage(${pageBean.totalPage});"> Tail page </a>
The first <input type="text" size="2" id="pageNumber" onkeypress="toPageNumber(event,this.value)"/>
<a href="javascript:goPage(document.getElementById('pageNumber').value);">GO</a>
</div>
<!-- Hidden form for paging , Save query parameters -->
<form action="${pageBean.url}" id="pagingForm" method="post">
<input type="hidden" name="page" value="${pageBean.page}"/>
<!-- First, only consider the query parameters of this function , No consideration of commonality ( Different functions have different parameters ) -->
<input type="hidden" name="sname" value="<%=request.getParameter("sname")%>"/>
</form>
</body>
<script> function goPage(pageNum){
let form = document.getElementById("pagingForm"); let lastPage = '${pageBean.totalPage}'; if(pageNum > lastPage){
pageNum = lastPage; } if(pageNum < 1){
pageNum = 1; } form.page.value = pageNum; form.submit(); } function toPageNumber(event,pn){
//debugger; if(event.keyCode == 13){
let form = document.getElementById("pagingForm"); form.page.value = pn; form.submit(); } } </script>
</html>
Two 、 Prepare one Servlet
Prepare one servlet Used to process requests , Get the data in the database , And forward to the result display page .
StudentServlet .class
package com.zking.mymvc.servlet;
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.zking.mymvc.model.Student;
import com.zking.mymvc.util.PageBean;
import com.zking.mymvc.util.StudentDao;
@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);
// Get query parameters
String sname = req.getParameter("sname");
List<Student> students = dao.getStudent02(sname, pageBean);
req.setAttribute("students", students);
System.out.println("dopost .......... ");
req.getRequestDispatcher("/student2.jsp").forward(req, resp);
}
}
3、 ... and 、 Filter to solve the problem of Chinese garbled
EncodingFiter .class
package com.zking.mymvc.util;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** * Character encoding filter * @author zjjt * */
@WebFilter("/*")
public class EncodingFiter implements Filter{
private String encoding = "UTF-8";// Default character set
public EncodingFiter() {
super();
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// Chinese processing must be put into chain.doFilter(request, response) Method front
res.setContentType("text/html;charset=" + this.encoding);
if (req.getMethod().equalsIgnoreCase("post")) {
req.setCharacterEncoding(this.encoding);
} else {
Map map = req.getParameterMap();// Save all parameter names = Parameter values ( Array ) Of Map aggregate
Set set = map.keySet();// Take out all parameter names
Iterator it = set.iterator();
while (it.hasNext()) {
String name = (String) it.next();
String[] values = (String[]) map.get(name);// Take out the parameter value [ notes : The parameter value is an array ]
for (int i = 0; i < values.length; i++) {
values[i] = new String(values[i].getBytes("ISO-8859-1"),
this.encoding);
}
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
String s = filterConfig.getInitParameter("encoding");// Read web.xml The character set configured in the file
if (null != s && !s.trim().equals("")) {
this.encoding = s.trim();
}
}
}
stay web.xml The file says
Four 、 Encapsulate paging labels
In order to facilitate code reuse , And maintainability , We encapsulate the paging function with a custom tag ( In fact, it is the code originally written in the page , By moving into the custom tag ), Developing custom tags is divided into three steps :
Write helper classes
Write label description file
Introduce the tag library on the page , And use
1) Write helper classes
package com.zking.mymvc.tag;
import java.io.IOException;
import java.util.Map;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.zking.mymvc.util.PageBean;
/** * Helper * @author zjjt * */
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();// Get a write out object
try {
out.print(buildHtml());// Write directly
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
// Construct paged page output
private String buildHtml() {
String pagingTool="<div style=\"text-align: right; width:98%;\">\r\n"
+ " The first "+pageBean.getPage()+" page \r\n"
+ " common "+pageBean.getTotal()+" Bar record \r\n"
+ " <a href=\"javascript:goPage(1);\"> home page </a> \r\n"
+ " <a href=\"javascript:goPage("+pageBean.getPreviousPage()+");\"> page-up key </a> \r\n"
+ " <a href=\"javascript:goPage("+pageBean.getNextPage()+");\"> next page </a> \r\n"
+ " <a href=\"javascript:goPage("+pageBean.getTotalPage()+");\"> Tail page </a> \r\n"
+ " The first <input type=\"text\" size=\"2\" id=\"pageNumber\" οnkeypress=\"toPageNumber(event,this.value)\"/> \r\n"
+ " <a href=\"javascript:goPage(document.getElementById('pageNumber').value);\">GO</a>\r\n"
+ " </div>";
// Build hidden forms , Used to pass paging parameters when paging
String hiddenForm = "<form action='" + pageBean.getUrl() + "' id=\"pagingForm\" method=\"post\">"
+ "<input type=\"hidden\" name=\"page\" />";
Map<String, String[]> parameterMap = pageBean.getParameterMap();// Get all parameters
// Loop all parameters , And generate hidden forms for all parameters
for(Map.Entry<String, String[]> param: parameterMap.entrySet()) {
String paramName = param.getKey();// Get a name
if("page".equals(paramName)) continue;// Just skip
String[] values = param.getValue();// Get parameter value , An attribute may have multiple values, so use an array
for(String val: values) {
// Above is the array
hiddenForm += "<input type='hidden' name='" + paramName + "' value='" + val + "'>";
}
}
hiddenForm += "</form>";
String js="<script>\r\n"
+ " function goPage(pageNum){\r\n"
+ " let form = document.getElementById(\"pagingForm\");\r\n"
+ " \r\n"
+ " let lastPage = '"+pageBean.getTotalPage()+"';\r\n"
+ " if(pageNum > lastPage){\r\n"
+ " pageNum = lastPage; \r\n"
+ " }\r\n"
+ " if(pageNum < 1){\r\n"
+ " pageNum = 1;\r\n"
+ " }\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"
+ " \r\n"
+ "</script>";
return pagingTool+hiddenForm+js;
}
}
2) Add paging label
<tag>
<name>paging</name>
<tag-class>com.zking.mymvc.tag.PagingTag</tag-class>
<body-content>empty</body-content>
<description> Pagination label </description>
<attribute>
<name>pageBean</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
3) Use pagination labels
First, introduce tags into the page
<%@taglib prefix="z" uri="/zking" %>
The original paging function , Replace with a label
<z:paging pageBean="${pageBean}"/>
4) After encapsulation student.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- Introduced C label -->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- Introduce custom tag library -->
<%@taglib prefix="z" uri="/zking" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> Student information </h1>
<form action="<%=request.getContextPath()%>/students" method="post">
<input type="text" name="sname">
<input type="submit" value=" Inquire about ">
</form>
<table border="1" style="width: 98%;">
<tr>
<td> Student number </td>
<td> full name </td>
<td> Age </td>
<td> remarks </td>
</tr>
<c:forEach items="${students}" var="student">
<tr>
<td>${
student.sid}</td>
<td>${
student.sname}</td>
<td>${
student.score}</td>
<td>${
student.clazz}</td>
</tr>
</c:forEach>
</table>
<z:paging pageBean="${pageBean}"/>
</body>
</html>
边栏推荐
- Fusion cloud native, enabling new mileage | 2022 open atom global open source summit cloud native sub forum successfully held
- What SaaS architecture design does a software architect need to know?
- MySQL之知识点(十三)
- 30 years of open source community | 2022 open atom global open source summit 30 years of special activities of open source community were successfully held
- Unity 安装 Device Simulator
- 20220728-Object类常用方法
- How does musk lay off staff?
- 洪九果品通过聆讯:5个月经营利润9亿 阿里与中国农垦是股东
- Developing NES games with C language (cc65) 11. Metatiles
- C语言项目中使用json
猜你喜欢

奥浦迈生物通过注册:半年营收1.47亿 国寿成达与达晨是股东

AVL树(平衡搜索树)

界面控件Telerik UI for WPF - 如何使用RadSpreadsheet记录或评论

Fusion cloud native, enabling new mileage | 2022 open atom global open source summit cloud native sub forum successfully held

Uniapp wechat applet realizes the function of connecting low-power Bluetooth printing

Redis实现分布式锁

新东方单季营收5.24亿美元同比降56.8% 学习中心减少925间

Open source office (ospo) unveils Secrets

Why do enterprises need the ability of enterprise knowledge management?

Kuzaobao: summary of Web3 encryption industry news on July 13
随机推荐
C# 结构使用
Uninstall Navicat: genuine MySQL official client, really fragrant!
Ten prohibitions for men and women in love
Open source database innovation in the era of digital economy | the 2022 open atom global open source summit database sub forum was successfully held
Aopmai biological has passed the registration: the half year revenue is 147million, and Guoshou Chengda and Dachen are shareholders
GMT安装与使用
Developing NES games with C language (cc65) 09, scrolling
Developing NES games (cc65) 05 and palette with C language
Introduction to several methods of keeping two decimal places in PHP
【萌新解题】爬楼梯
Fastjson parses multi-level JSON strings
Develop NES game (cc65) 07 and controller with C language (collision with spirit)
Latex matrix is simple to use
sqli-labs(less-8)
SQL injection less24 (secondary injection)
Laravel $object->updated_ At returns the carbon object. How to return the normal time format
If you don't roll the golden nine and silver ten, it's too late
[half understood] zero value copy
HMS core audio editing service supports 7 kinds of audio effects to help one-stop audio processing
Some API interfaces purchased by Yiwu hope to bring you some help