文档章节

javaweb自定义标签

那位先生_
 那位先生_
发布于 2014/07/09 12:56
字数 807
阅读 275
收藏 7

标签处理类:PageTagLib.java

import java.io.IOException;

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

public class PageTagLib extends TagSupport {
	private JspWriter writeout;
	private int crruntPage;
	private int pageSize;
	private int totalCount;
	private String doClick;
	/**
	 * 序列化
	 */
	private static final long serialVersionUID = 3174234039143531070L;

	/**
	 * [@see](https://my.oschina.net/weimingwei) 如若使用直接定位的 的input name名为crruntPage
	 */
	@Override
	public int doEndTag() throws JspException {
		initWriter();
		showPageBody();
		return EVAL_PAGE;
	}

	public void showPageBody() {
		int PageSize = getPageSize() == 0 ? Constants.PAGESIZE : getPageSize();
		setPageSize(PageSize);
		StringBuffer out = new StringBuffer();
		out = out.append("<tr>");
		out = out.append("<td width='25%' height='29' nowrap='nowrap'><span>");
		out = out.append("共 " + getTotalCount() + " 条纪录,当前第 [ "
				+ getCrruntPage() + " / " + getMaxCount()[2] + " ] 页,每页"
				+ PageSize + "条纪录");
		out = out.append("</span></td>");
		out = out.append("<td width='75%' valign='top'><div align='right'>");
		out = out
				.append("<table width='352' height='20' border='0' cellpadding='0' cellspacing='0'>");
		out = out.append("<tr>");
		int lastPage = getCrruntPage() - 1 <= 0 ? 1 : getCrruntPage() - 1;
		int nextPage = getCrruntPage() + 1 > getMaxCount()[2] ? getMaxCount()[2]
				: getCrruntPage() + 1;
		out = out
				.append("<td width='62' height='22' valign='middle'><div align='right'><img src='images/first.gif' onclick =\""
						+ getDoClick()
						+ "\"  href=\"#\" id=1  width='37' height='15' /></div></td>");
		out = out
				.append("<td width='50' height='22' valign='middle'><div align='right'><img src='images/back.gif' onclick =\""
						+ getDoClick()
						+ "\"  href=\"#\" id="
						+ lastPage
						+ "  width='43' height='15' /></div></td>");
		out = out
				.append("<td width='54' height='22' valign='middle'><div align='right'><img src='images/next.gif' onclick =\""
						+ getDoClick()
						+ "\"  href=\"#\" id="
						+ nextPage
						+ " width='43' height='15' /></div></td>");
		out = out
				.append("<td width='49' height='22' valign='middle'><div align='right'><img src='images/last.gif' onclick =\""
						+ getDoClick()
						+ "\"  href=\"#\" id="
						+ getMaxCount()[2]
						+ "  width='37' height='15' /></div></td>");
		out = out
				.append("<td width='59' height='22' valign='middle'><div align='right'>转到第</div></td>");
		out = out
				.append("<td width='25' height='22' valign='middle'><span class='STYLE7'>");
		out = out
				.append("<input type=\"text\" class=\"pageText\" style='height:13px; width:25px;' size='5'  onkeyup=\"this.value=this.value.replace(/\\D/g,'');if(this.value > "
						+ getMaxCount()[2]
						+ "){this.value=''}\" onafterpaste=\"this.value=this.value.replace(/\\D/g,'')\"  name ='crruntPage' id ='crruntPage' value="
						+ getCrruntPage() + " />");
		out = out.append("</span></td>");
		out = out.append("<td width='23' height='22' valign='middle'>页</td>");
		out = out
				.append("<td width='30' height='22' valign='middle'><img src='images/go.gif' id=\"button\" onclick =\""
						+ getDoClick() + "\" width='37' height='15' /></td>");
		out = out.append("</tr>");
		out = out.append("</table>");
		out = out.append("</div></td>");
		out = out.append("</tr>");
		out = out.append("</table></td>");
		out = out
				.append("<td width='14'><img src='images/tab_22.gif' width='14' height='29' /></td>");
		out = out.append("</tr>");

		try {
			this.writeout.println(out.toString());
			this.writeout.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/** 获取当前页数的和最大页数的算法 * */
	public int[] getMaxCount() {
		int x = 1, y = 0;
		// 总页面数
		int totalPage = (getTotalCount() % getPageSize() == 0 ? getTotalCount()
				/ getPageSize() : getTotalCount() / getPageSize() + 1);
		if (getCrruntPage() < 5 && getCrruntPage() > 0) {
			if (totalPage >= 5) {
				x = 1;
				y = 5;
			} else {
				x = 1;
				y = totalPage;
			}
		}
		if (getCrruntPage() > 2 && (getCrruntPage() + 2) <= totalPage) {
			x = getCrruntPage() - 2;
			y = getCrruntPage() + 2;
		}
		if (getCrruntPage() > 4 && (getCrruntPage() + 2) > totalPage) {
			x = getCrruntPage() - 3;
			y = totalPage;
		}
		if (getCrruntPage() == totalPage && getCrruntPage() > 4) {
			x = getCrruntPage() - 4;
			y = totalPage;
		}
		if (totalPage == 1) {
			x = 1;
			y = 1;
		}
		if (totalPage == 0) {
			x = 1;
			y = 1;
		}
		int[] out = new int[] { x, y, totalPage };
		return out;
	}

	/** 获取页面中的out的对象 */
	public void initWriter() {
		try {
			this.pageContext.getResponse().flushBuffer();
			this.writeout = this.pageContext.getOut();
		} catch (Exception e) {
			// e.printStackTrace();
		}
	}

	public int getCrruntPage() {
		return crruntPage;
	}

	public void setCrruntPage(int crruntPage) {
		this.crruntPage = crruntPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public String getDoClick() {
		return doClick;
	}

	public void setDoClick(String doClick) {
		this.doClick = doClick;
	}
}

配置文件:page.tld

	<?xml version="1.0" encoding="utf-8"?>
	<taglib 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"
	 version="2.0" >
	 <description>page Tag</description>
	 <tlib-version>1.0</tlib-version>
	 <short-name>page_tag</short-name>
	 <uri>/page_tag</uri>
	 <tag>
	  <name>showPageTag</name>
	  <tag-class>com.immunity.util.PageTagLib</tag-class>
	  <body-content>empty</body-content>
	  <attribute><!-- 当前页面 -->
	   <name>crruntPage</name>
	   <required>true</required>
	   <rtexprvalue>true</rtexprvalue>
	  </attribute>
	  <attribute>
	    <name>pageSize</name> <!-- 页面最大显示数 -->
	    <required>false</required>
	    <rtexprvalue>true</rtexprvalue>
	  </attribute>
	  <attribute>
	    <name>totalCount</name><!-- 总记录数 -->
	    <required>true</required>
	    <rtexprvalue>true</rtexprvalue>
	  </attribute>
	  <attribute>
	    <name>doClick</name><!-- 执行跳转的单击事件, -->
	    <required>true</required>
	    <rtexprvalue>true</rtexprvalue>
	  </attribute>
	 </tag>
	</taglib>

web.xml

	<jsp-config>
		  <taglib>
			<taglib-uri>/page_tag</taglib-uri>
			<taglib-location>/WEB-INF/page.tld</taglib-location>
		  </taglib>
		  <jsp-property-group>
			<url-pattern>/jsp/*</url-pattern>
			<page-encoding>utf-8</page-encoding>
		  </jsp-property-group>
	</jsp-config>

页面使用 jsp文件中

	<%@ taglib uri="/page_tag" prefix="page_tag"%>
	<!--showPageTag是page.tld中tag标签的name属性-->
	<page_tag:showPageTag  doClick="doPage(this);" totalCount="${totalCount}" crruntPage="${crruntPage}" />

© 著作权归作者所有

那位先生_

那位先生_

粉丝 131
博文 61
码字总数 69487
作品 0
深圳
后端工程师
私信 提问
javaweb开发之jsp

一、JSP概述 在JSP出现之前,java体系的动态网页是由servlet来生成的。但由于用Servlet生产动态网页非常麻烦,难于维护,必须由程序员来编写,页面设计人员如果不懂java代码,根本无法维护。...

小米米儿小
2013/12/04
237
0
java进阶之路

Java程序员 高级特性 反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入 核心编程 IO、多线程、实体类、集合类、正则表达式、XML和属性文件 ·图形编...

旋转木马-千里马
2016/01/19
310
0
java技术路线

在技术方面无论我们怎么学习,总感觉需要提升自已,却又不知道从哪里着手,同时也不知道自己处于哪个水平。这时候就需要有清晰的指示图来指引我们,这样我们能清楚的知道我们在哪方面不足,以...

罗文浩
2015/11/26
210
1
Jexo,一个免费开源的javawebcms管理系统

Jexo源码下载地址:https://git.oschina.net/vlive/Jexo Jexo,一个免费开源的javawebcms管理系统,完全可替代wordpress。 Jexo是采用2016年最新主流技术开发的免费开源JAVACMS系统。商用收费...

jexoer
2016/10/06
9
0
Java开发手册及JavaWeb工程师的成长及实践(及进阶)

> 进阶 个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能- http://geek.csdn.net/news/detail/246999 成为一名合格软件工程师的7点建议- http://blog.csdn.net/dev_csdn/artic...

shareus
2016/03/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TiDB 最佳实践系列(三)乐观锁事务

作者:Shirly TiDB 最佳实践系列是面向广大 TiDB 用户的系列教程,旨在深入浅出介绍 TiDB 的架构与原理,帮助用户在生产环境中最大限度发挥 TiDB 的优势。我们将分享一系列典型场景下的最佳实...

TiDB
17分钟前
2
0
原来缓存是这样

经过一闪而过的一个灵感,记下来,我觉得缓存的定义应该是这样定义的: 我之前一直认为缓存的词义是错误的:是在读取到值之后,再次被使用的时候,不会去取新的值,而是使用旧的值,这是是错...

走向人生巅峰的大路
19分钟前
3
0
数字货币交易所开发常用的7个开源撮合引擎

如果你希望按照自己的需求打造金融交易平台,那么应当选择合适的交易撮合引擎进行二次开发而不是基于完整的交易平台实现进行修改。本文将介绍10个采用不同语言开发的开源的撮合引擎,你可以根...

汇智网教程
22分钟前
3
0
Spring Security做JWT认证和授权

Spring Security做JWT认证和授权

乐逍遥-镜子
24分钟前
3
0
LNMP---日志不记录静态文件、日志切割、静态文件过期缓存、nginx防盗链

4.39 日志不记录静态文件 4.40 日志切割 4.41 静态文件过期缓存 4.42 nginx防盗链 扩展: yum install lrzsz -yrz 上传文件sz filename 这样去把这个文件推送到windows上 一、日志不记录...

tobej
35分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部