通用分页02

通用分页02

  • 1、通用分页中用到的自定义标签
    • 1.1自定义标签的生命周期
    • 1.2自定义分页标签的开发及使用步骤
  • 总结

1、通用分页中用到的自定义标签

通用分页的前半段在我之前写过的博客里欧~
这是一个通用分页01的传送门(点击)

自定义一个分页按钮标签比直接在页面上写要更简洁一点,看起来也比较有条理(个人看法),可以更加灵活的完成通用分页,后面如果有相似的场景需要分页也可以直接调用,简化代码,更方便一些。

1.1自定义标签的生命周期

这里我画了一个图,可看图理解:

在这里插入图片描述

1.2自定义分页标签的开发及使用步骤

1、创建一个标签助手类,要继承BodyTagSupport,标签属性必须和助手类的属性对应,
且要提供对应的get,set方法。
因为后面会用到pageBean,所以定义一个以PageBean为类型的对象pageBean

需要的方法

toHtml方法:
	将原来写在JSP界面的分页按钮层和js进行拼接,加上功能

doStartTag开始标签方法:
	获取到out,然后输出调用toHtml()方法

拼接的时候一定要注意细节

public class PageTag extends BodyTagSupport{

	private static final long serialVersionUID = 1L;
	private PageBean pageBean;
	//封装
	public PageBean getPageBean() {
		return pageBean;
	}
	public void setPageBean(PageBean pageBean) {
		this.pageBean = pageBean;
	}
	
	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		try {
			JspWriter out=this.pageContext.getOut();
			out.println(toHtml());
			return SKIP_BODY;
		} catch (Exception e) {
			// TODO: handle exception
			throw new RuntimeException(e);
		}
	}
	
	
	private String toHtml() {
		// TODO Auto-generated method stub
		StringBuffer sb=new StringBuffer();
		//防止pageBean空指针异常
		if(null==pageBean||!pageBean.isPagination()) {
			return sb.toString();
		}
		
		//这里拼接分页按钮
		sb.append("
\r\n" + " 当前第"+pageBean.getPage()+"页  共"+pageBean.getMaxPage()+"页  共"+pageBean.getTotal()+"条  \r\n" + " 首页  \r\n" + " 上一页  \r\n" + " 下一页  \r\n" + " 尾页  \r\n" + " \r\n" + " GO\r\n" + "
"
); //分页隐藏域表单 专门用来传递数据 sb.append("
"); sb.append(""); //从map集合中获取参数 Map<String, String[]> parameterMap=pageBean.getParameterMap(); //遍历集合 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { String name=entry.getKey(); String[] value=entry.getValue(); if("page".equals(name)) {//将上一次的页码抛掉 continue;//退出当前循环,进入下一个循环 } //遍历数组 for (int i = 0; i < value.length; i++) { sb.append(""); } } sb.append(""
); //这里动态拼接js sb.append(" "); return sb.toString(); } }
2、创建标签库描述文件(.tld),添加自定义标签的配置

注意:.tld文件必须保存到WEB-INF目录或其子目录下

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<!-- 这里放jsp界面taglib命令调用的路径 -->
	<uri>/wangjuanxia</uri>
	<tag>
		<!-- 标签名 -->
		<name>page</name>
		<!-- 标签助手类的路径 -->
		<tag-class>com.wangjuanxia.tag.PageTag</tag-class>
		<!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
		<body-content>empty</body-content>
		<!-- 自定义标签的属性定义,请注意一定要在标签类中提供对应的get/set方法 -->
		<attribute>
			<!-- 自定义标签的属性名称 -->
			<name>pageBean</name>
			<!-- true表示必填 -->
			<required>true</required>
			<!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
			<rtexprvalue>true</rtexprvalue>
			<description></description><!-- 属性的描述,可有可无,要放在属性的最后 -->
		</attribute>
	</tag>
</taglib>
3、在JSP通过taglib指令导入标签描述文件,并通过指定后缀访问自定义标签

通过taglib指令导入

<%@taglib prefix="z" uri="/wangjuanxia" %>

访问

<z:page pageBean="${pageBean }"/>

7.jsp界面
调用c标签写一个ui标签用来显示表的数据
然后直接调用我们刚刚写的自定义分页标签就好啦

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <!-- taglib指令导入标签描述文件 -->
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
	<%@taglib prefix="z" uri="/wangjuanxia" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>

</head>
<body>
	 <!-- 判断结果集是否有值 -->
 	<c:if test="${empty joblist }">
 		<jsp:forward page="jobServlet.action"></jsp:forward>
 	</c:if>
 	<table border="1px" width="100%"> 
 		<tr>
 		
 		 	<td>id</td>
 		 	<td>job</td>
 		 	<td>company</td>
 		 	<td>address</td>
 		 	<td>salary</td>
 		 	<td>url</td>
 		 	<td>limit</td>
 		 	<td>time</td>
 		 	<td>desc</td>
 		 	<td>jobHandle</td>
 		 	<td>addressHandle</td>
 		</tr>
 		 <!-- 遍历 -->
 		<c:forEach items="${joblist}" var="j" >
 		<tr>
 		 	<td>${j.id }</td>
 		 	<td>${j.job }</td>
 		 	<td>${j.company }</td>
 		 	<td>${j.address }</td>
 		 	<td>${j.salary }</td>
 		 	<td>${j.url }</td>
 		 	<td>${j.limit }</td>
 		 	<td>${j.time }</td>
 		 	<td>${j.desc }</td>
 		 	<td>${j.jobHandle }</td>
 		 	<td>${j.addressHandle }</td>
 		</tr>
 		</c:forEach>
 	</table>
 	 <!-- 自定义标签分页按钮 -->
 	<z:page pageBean="${pageBean }"/>
 	
</body>
</html>

总结

通用分页到这里就完成啦!

你可能感兴趣的:(笔记)