通用分页代码
通用分页02
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("<div style='text-align: center;font-size=20px;'>\r\n" +
" 当前第"+pageBean.getPage()+"页 共"+pageBean.getMaxPage()+"页 共"+pageBean.getTotal()+"条 \r\n" +
" <a href='javascript:doForward(1)'>首页 </a>\r\n" +
" <a href='javascript:doForward("+pageBean.getPreviousPage()+")'>上一页 </a>\r\n" +
" <a href='javascript:doForward("+pageBean.getNextPage()+")'>下一页 </a>\r\n" +
" <a href='javascript:doForward("+pageBean.getMaxPage()+")'>尾页 </a>\r\n" +
" <input id='numText' type='text' style='width:50px'/>\r\n" +
" <a href='javascript:doSkip()'>GO</a>\r\n" +
" </div>");
//分页隐藏域表单 专门用来传递数据
sb.append("<form id='pageForm' action='"+this.pageBean.getUrl()+"' method='post'>");
sb.append("<input type='hidden' name='page' />");
//从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("<input type='hidden' name='"+name+"' value='"+value[i]+"'/>");
}
}
sb.append("</form>");
//这里动态拼接js
sb.append(" <script type='text/javascript'>\r\n" +
" function doForward(page){\r\n" +
" var f=document.getElementById('pageForm');\r\n" +
" f.page.value=page;\r\n" +
" f.submit();\r\n" +
" }\r\n" +
" function doSkip(){\r\n" +
" var num=document.getElementById('numText').value;\r\n" +
" if(!num||isNaN(num)||!/^[0-9]+$/.test(num)||parseInt(num)<=0||parseInt(num)>"+pageBean.getMaxPage()+"){\r\n" +
" alert('请输入1~"+pageBean.getMaxPage()+"之间的整数');\r\n" +
" }\r\n" +
" doForward(num);\r\n" +
" }\r\n" +
"</script>");
return sb.toString();
}
}
2、创建标签代码
<!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>
重点:.tld文件必须保存到WEB-INF目录或其子目录下
.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>