分页标签库

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>
	<uri>/zking</uri>
	
	
	<tag>
		<name>page</name>
		<tag-class>com.zking.test.tag.PageTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>pageBean</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	
	<tag>
		<name>rownum</name>
		<tag-class>com.zking.test.tag.RownumTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>pageBean</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>count</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	
	<tag>
		<name>select</name>
		<tag-class>com.zking.test.tag.SelectTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>name</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>id</name>
			<required>false</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>cssStyle</name>
			<required>false</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>cssClass</name>
			<required>false</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>onchange</name>
			<required>false</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>items</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>valueKey</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>textKey</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>headValue</name>
			<required>false</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>headText</name>
			<required>false</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>selectedValue</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

分页标签

package com.zking.test.tag;

import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.zking.test.util.PageBean;

public class PageTag extends BodyTagSupport {

	private static final long serialVersionUID = 8003507841172246203L;

	private PageBean pageBean;

	public PageTag() {
		super();
	}

	public PageBean getPageBean() {
		return pageBean;
	}

	public void setPageBean(PageBean pageBean) {
		this.pageBean = pageBean;
	}

	@Override
	public int doStartTag() throws JspException {
		try {
			JspWriter out = pageContext.getOut();
			out.println(this.toHtml());
			return SKIP_BODY;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	private String toHtml() {
		StringBuffer bf = new StringBuffer();
		if (null == pageBean || !pageBean.isPagination()) {
			return bf.toString();
		}

		// 1. 生成表单
		bf.append("<form id='pageBeanForm' action='" + pageBean.getUrl() + "' method='post'>");
		bf.append("<input type='hidden' name='page' value=''>");
		for (Map.Entry<String, String[]> entry : pageBean.getParameterMap().entrySet()) {
			String name = entry.getKey();
			String[] values = entry.getValue();
			if ("page".equals(name)) {
				continue;
			}

			for (String value : values) {
				bf.append("<input type='hidden' name='" + name + "' value='" + value + "'>");
			}
		}
		bf.append("</form>");

		// 2. 生成按钮
		bf.append("<div style='text-align: right;font-size: 12px;'>每页" + pageBean.getRows() + "条,共"
				+ pageBean.getTotal() + "条,当前第" + pageBean.getPage() + "页,共" + pageBean.getMaxPage()
				+ "页&nbsp;&nbsp;<a href='javascript:doGotoPage(1)'>首&nbsp;&nbsp;页</a>&nbsp;&nbsp;<a href='javascript:doGotoPage("
				+ pageBean.getPreviousPage() + ")'>上一页</a>&nbsp;&nbsp;<a href='javascript:doGotoPage("
				+ pageBean.getNextPage() + ")'>下一页</a>&nbsp;&nbsp;<a href='javascript:doGotoPage("
				+ pageBean.getMaxPage()
				+ ")'>尾&nbsp;&nbsp;页</a>&nbsp;&nbsp;<input id='pageNumber' type='text' style='text-align: center;width: 30px;'>&nbsp;&nbsp;<a href='javascript:doSkipPage();'>GO</a></div>");

		// 3. 动态生成js
		bf.append("<script type='text/javascript'>");
		bf.append("function doGotoPage(page){");
		bf.append("  var form = document.getElementById('pageBeanForm');");
		bf.append("  form.page.value = page;");
		bf.append("  form.submit();");
		bf.append("}");
		bf.append("function doSkipPage(page){");
		bf.append("  var page = document.getElementById('pageNumber').value;");
		bf.append("  if(!page||isNaN(page)||parseInt(page)<1||parseInt(page)>"+pageBean.getMaxPage()+"){");
		bf.append("    alert('页码必须为1~"+pageBean.getMaxPage()+"之间数字');");
		bf.append("    document.getElementById('pageNumber').value = '';");
		bf.append("    return;");
		bf.append("  }");
		bf.append("  doGotoPage(parseInt(page));");
		bf.append("}");
		bf.append("</script>");
		return bf.toString();
	}
}

标识记录

package com.zking.test.tag;

import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.zking.test.util.PageBean;

public class RownumTag extends BodyTagSupport {

	private static final long serialVersionUID = 8003507841172246203L;

	private PageBean pageBean;

	private Integer count;

	public RownumTag() {
		super();
	}

	public Integer getCount() {
		return count;
	}

	public void setCount(Integer count) {
		this.count = count;
	}

	public PageBean getPageBean() {
		return pageBean;
	}

	public void setPageBean(PageBean pageBean) {
		this.pageBean = pageBean;
	}

	@Override
	public int doStartTag() throws JspException {
		try {
			int rownum = (pageBean.getPage() - 1) * pageBean.getRows() + count;
			JspWriter out = pageContext.getOut();
			out.println(rownum + "");
			return SKIP_BODY;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

下拉标签

package com.zking.test.tag;

import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.commons.beanutils.PropertyUtils;

public class SelectTag extends BodyTagSupport {

	private static final long serialVersionUID = 8988102673322920172L;

	private String name;// 非空 <select name=''>
	private String id;// 允许空 <select id=''>
	private String cssStyle;// 允许空 <select style=''>
	private String cssClass;// 允许空 <select class=''>
	private String onchange;// 允许空 <select onchange=''>

	private List<Object> items;// 非空,数据源
	private String valueKey;// 非空属性名,用此对象此属性生成option的value
	private String textKey;// 非空属性名,用此对象此属性生成option的text

	private String headText;// 允许空
	private String headValue = "";// 允许空

	private Object selectedValue;// 允许空

	public SelectTag() {
		super();
	}

	public Object getSelectedValue() {
		return selectedValue;
	}

	public void setSelectedValue(Object selectedValue) {
		this.selectedValue = selectedValue;
	}

	public String getHeadText() {
		return headText;
	}

	public void setHeadText(String headText) {
		this.headText = headText;
	}

	public String getHeadValue() {
		return headValue;
	}

	public void setHeadValue(String headValue) {
		this.headValue = headValue;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getCssStyle() {
		return cssStyle;
	}

	public void setCssStyle(String cssStyle) {
		this.cssStyle = cssStyle;
	}

	public String getCssClass() {
		return cssClass;
	}

	public void setCssClass(String cssClass) {
		this.cssClass = cssClass;
	}

	public String getOnchange() {
		return onchange;
	}

	public void setOnchange(String onchange) {
		this.onchange = onchange;
	}

	public List<Object> getItems() {
		return items;
	}

	public void setItems(List<Object> items) {
		this.items = items;
	}

	public String getValueKey() {
		return valueKey;
	}

	public void setValueKey(String valueKey) {
		this.valueKey = valueKey;
	}

	public String getTextKey() {
		return textKey;
	}

	public void setTextKey(String textKey) {
		this.textKey = textKey;
	}

	@Override
	public int doStartTag() throws JspException {
		try {
			JspWriter out = pageContext.getOut();
			out.println(this.toHTML());
			return SKIP_BODY;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	private String toHTML() throws Exception {
		StringBuffer bf = new StringBuffer();
		bf.append("<select");
		bf.append(" name='" + name + "'");
		if (null != id) {
			bf.append(" id='" + id + "'");
		}
		if (null != cssStyle) {
			bf.append(" style='" + cssStyle + "'");
		}
		if (null != cssClass) {
			bf.append(" class='" + cssClass + "'");
		}
		if (null != onchange) {
			bf.append(" onchange='" + onchange + "'");
		}
		bf.append(">");
		if (null != headText) {
			bf.append("<option value='" + headValue + "'>" + headText + "</option>");
		}

		for (int i = 0; null != items && i < items.size(); i++) {
			Object obj = items.get(i);// deptId,deptName
			Object value = PropertyUtils.getProperty(obj, valueKey);// deptId
			Object text = PropertyUtils.getProperty(obj, textKey);// deptName
			if (null != selectedValue && selectedValue.equals(value)) {
				bf.append("<option selected value='" + value + "'>" + text + "</option>");
			} else {
				bf.append("<option value='" + value + "'>" + text + "</option>");
			}
		}
		bf.append("</select>");
		return bf.toString();
	}

}

猜你喜欢

转载自blog.csdn.net/f_1314520/article/details/83047088