以前没有写blog的习惯,总是看别人的。今天开始边学习,边总结吧。新人还望指点。废多看题0.0
进入主题:自定义标签的简单使用,成果是这两天做的分页标签。
我的步骤:
1、首先是建一个分页Page的实体类
import java.util.List;
import com.google.common.collect.Lists;
public class Page<M> {
// 当前页号
protected Integer pageNo = 1;
// 每页显示的记录条数
protected Integer pageSize = 10;
// 总记录条数
protected Long totalCount = (long) 0;
// 总页数
protected Integer totalPage = 0;
// 结果集合
protected List<M> result = Lists.newArrayList();
public Integer getPageNo() {
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
if (pageNo < 1) {
this.pageNo = 1;
}
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
if (pageSize < 1) {
this.pageSize = 1;
}
}
public Long getTotalCount() {
return totalCount;
}
public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}
public Integer getTotalPage() {
Integer totalPage = (int) (totalCount / pageSize);
if (totalCount % pageSize > 0)
totalPage++;
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
<span style="white-space:pre"> </span>
public List<M> getResult() {
return result;
}
public void setResult(List<M> result) {
this.result = result;
}
/**
* 获取当前页第一条记录在总结果集中的位置,序号从1开始,总结果集中位置编号从0开始
*
* @return
*/
public Integer getFirst() {
return ((pageNo - 1) * pageSize);
}
}
2
、
创建分页标签PageTag类,继承TagSupp。(注意:根据样式的不同,分页的class可替换)
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class PageTag<M> extends TagSupport {
private static final long serialVersionUID = -7573666909332294575L;
// 每页显示数量
private int pageSize = 10;
// 当前页号
private int pageNo = 1;
// 总记录数
protected Long totalCount = (long) 0;
// 总页数
protected int totalPage = 0;
// 地址
private String url;
// 查询参数
private String param;
@Override
public int doEndTag() throws JspException {
return super.doEndTag();
}
@SuppressWarnings("unchecked")
@Override
public int doStartTag() throws JspException {
// 获取请求中的所有参数
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
Page<M> page = (Page<M>) request.getAttribute("page");
if (page != null) {
pageNo = page.getPageNo();
pageSize = page.getPageSize();
totalCount = page.getTotalCount();
totalPage = page.getTotalPage();
}
StringBuilder sb = new StringBuilder();
sb.append("<div class='pagin'>");
if (totalCount == 0) {
sb.append("<strong>没有可显示的项目</strong>\r\n");
} else {
sb.append("<div class='message'>共<i class='blue'>" + totalCount
+ "</i>条记录,");
sb.append("共<i class='blue'>" + totalPage + "</i>页,当前显示第 ");
sb.append("<i class='blue'>" + pageNo + " </i>页 ");
sb.append("每页显示 <select style='width: 40px;border: 1px solid #3399d5;opacity:1;' οnchange=\"changePageSize(this,'"
+ url + "'," + param + ")\">");
for (int i = 10; i <= 50; i += 10) {
if (pageSize == i) {
sb.append("<option value='" + i + "' selected='selected'>"
+ i + "</option>");
} else {
sb.append("<option value='" + i + "'>" + i + "</option>");
}
}
sb.append("</select>");
sb.append("</div>");
sb.append("<ul class='paginList'>");
sb.append("<li class='paginItem'><a οnclick=\"findByPage(0,"
+ pageSize + ",'" + url + "'," + param + ")\">首页</a></li>");
// 开始的页号
int first = 1;
// 最后的页号
int end = 10;
// 如果总页数小于10,结束页即为总页数
if (totalPage < end) {
end = totalPage;
}
if (pageNo <= 5) {
first = 1;
} else {
first = pageNo - 4;
end = pageNo + 5;
if (end > totalPage) {
end = totalPage;
first = end - 9;
}
}
for (int i = first; i <= end; i++) {
if (i == pageNo) {
sb.append("<li class='paginItem current'><a οnclick=\"findByPage("
+ i
+ ","
+ pageSize
+ ",'"
+ url
+ "',"
+ param
+ ")\">" + i + "</a></li>");
} else {
sb.append("<li class='paginItem'><a οnclick=\"findByPage("
+ i + "," + pageSize + ",'" + url + "'," + param
+ ")\">" + i + "</a></li>");
}
}
sb.append("<li class='paginItem'><a οnclick=\"findByPage("
+ totalPage + "," + pageSize + ",'" + url + "'," + param
+ ")\">尾页</a></li>");
sb.append("</ul>");
}
sb.append("</div>");
try {
pageContext.getOut().println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public Long getTotalCount() {
return totalCount;
}
public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
}
3、编写pageTag.tld配置文件,放在WEB-INF下,与web.xml平行
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>k</short-name>
<uri>http://kframe.com/tags/page</uri>
<tag>
<name>pager</name>
<tag-class>com.zbtg.util.PageTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>pageNo</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<attribute>
<name>pageSize</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>String</type>
</attribute>
<attribute>
<name>param</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>String</type>
</attribute>
</tag>
</taglib>
附说明:
创建标签库描述文件(Tag Library Descriptor)
1、标签库描述文件,简称TLD,采用XML文件格式,定义了用户的标签库。TLD文件中的元素可以分成3类:
A.标签库元素
B.标签元素
C.标签属性元素
2、标签库元素用来设定标签库的相关信息,它的常用属性有:
A.shortname:指定Tag Library默认的前缀名(prefix);
B.uri:设定Tag Library的惟一访问表示符。
3、标签元素用来定义一个标签,它的常见属性有:
A.name:设定Tag的名字;
B.tagclass:设定Tag的处理类;
C.bodycontent:设定标签的主体(body)内容。
1)empty:表示标签中没有body;
2)JSP:表示标签的body中可以加入JSP程序代码;
3)tagdependent:表示标签中的内容由标签自己去处理。
4、标签属性元素用来定义标签的属性,它的常见属性有:
A.name:属性名称;
B.required:属性是否必需的,默认为false;
C.rtexprvalue:属性值是否可以为request-time表达式,也就是类似于< %=…% >的表达式。
4、最后就是向web.xml中配置pageTag.tld
<jsp-config>
<taglib>
<taglib-uri>http://kframe.com/tags/page</taglib-uri>
<taglib-location>/WEB-INF/pageTag.tld</taglib-location>
</taglib>
</jsp-config>
5、在web应用中使用标签
<% @ taglib prefix = “k” uri = "http://kframe.com/tags/page" %>