`

JSP自定义标签--有正文的且带有属性的JSP自定义标签实现

    博客分类:
  • jsp
阅读更多
package cn.com.chenlly.tag;
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class BodyTag extends BodyTagSupport {
	private int count;
	private HttpServletRequest reqeust;
	private JspWriter out;

	public void init() {
		reqeust = (HttpServletRequest) pageContext.getRequest();
		out = pageContext.getOut();
	}

	@Override
	public int doStartTag() throws JspException {
		init();
		return this.EVAL_BODY_INCLUDE;
	}

	// 设置当前标签体
	@Override
	public void setBodyContent(BodyContent bodyContent) {
		this.bodyContent = bodyContent;
		System.out.println("setBodyContent...");
	}

	// 需要初始化bodyContent
	@Override
	public void doInitBody() throws JspException {
		System.out.println("init.....");
	}

	@Override
	public int doAfterBody() throws JspException {
		if (count >= 1) {
			try {
				out.println(count);
				out.println("<Br>");
			} catch (IOException e) {
				e.printStackTrace();
			}
			count--;
			return this.EVAL_BODY_AGAIN;
		} else {
			return this.SKIP_BODY;
		}
	}

	@Override
	public int doEndTag() throws JspException {
		java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat(
				"yyyy-MM-dd");
		String date = formater.format(new Date());
		try {
			out.print(date);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return this.EVAL_PAGE;
	}

	// 必须实现setXX()方法
	public void setCount(int count) {
		this.count = count;
	}
}



<?xml version="1.0" encoding="UTF-8"?>
<taglib>
	<tlibversion>1.0</tlibversion>
	<jspversion>1.1</jspversion>
	<tag>
		<name>iterator</name>
		<tagclass>cn.com.chenlly.tag.BodyTag</tagclass>
		<bodycontent>jsp</bodycontent>
		<!-- 定义属性 -->
		<attribute>
			<name>count</name><!-- 属性名字 -->
			<type>int</type><!-- 属性类型 -->
			<requried>false</requried><!-- 是否必须 -->
			<rtexprvale>false</rtexprvale><!-- 表示是否可以使用JSP表达式  -->
		</attribute>
	</tag>
</taglib>



<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/bodytag.tld" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
	</head>
	<body>
		<c:iterator count="10">HelloWorld!</c:iterator>
		<%
			out.println("Bye Bye");
		%>
	</body>
</html>




执行顺序

doStartTag()->setBodyContent()->doInitBody()->doAfterTag()->doEndTag()

如果doStartTag()返回的是EVAL_BODY_INCLUDE执行doAfterTag()方法,

如果它返回SKIP_BODY就执行doEndTag()方法。

setBodyContent()方法用于设置标签体内容,如果在计算BodyContent时需要进行一些初始化工作,

则在doInitBody()方法中完成。标签体内容执行完后,会调用doAfterBody()方法

在doAfterTag()方法中返回EVAL_BODY_AGAIN来重复执行doAfterTag()方法

返回SKIP_BODY值则执行doEndTag()方法。

在doEndTag()方法中返回EVAL_PAGE值,则执行此标签的后的其它代码,

返回SKIP_PAGE则不执行此页面的其它代码。





分享到:
评论

相关推荐

    JSP自定义标签-标签属性_动力节点Java学院整理

    例如前一篇博客使用简单标签来对标签体内容执行一定的次数,就无法在标签上规定要执行的次数,必须在标签处理器类中修改,很不方便,如果使用带属性的标签就能很好的解决这个问题。  要想使简单标签具有属性,通常...

    一个用于分页的自定义标签

    java web项目一个自定义的分页标签

    其他类别分页 QQ菜单 jsp标签-noka3.9.rar

    这个压缩文件包含了多个有关实现分页功能的JSP代码片段,以及如何集成QQ菜单和各种JSP自定义标签库的示例。这些资源对于开发动态网站和网络应用程序的开发者来说非常有用,因为它们提供了一些预构建的功能模块,可以...

    Struts2+jsp自定义分页组件以及源码

    自已写的一个jsp自定义分页器zoo-paging-1.0.jar,附带有源码以及例子,希望对大家有用!

    JSP2.0技术手册pdf(带示例源码).zip

    书名:JSP 2.0 技术手册(电子书) 格式:PDF 出版:电子工业出版社 作者:林上杰、林康司 本书图文并茂,以丰富的实例为引导,全面介绍了主流的 Java Web 开发技术—— JSP 2.0,重点介绍Java在展示层的两项重要技术...

    自定义alert 弹框 弹窗

    自定义alert 弹框 弹窗 公用的alert.jsp的页面 引用直接使用 还可根据实际需要做修改,修改系统自带的弹框样式,有alertError 和alertSuccess两种样式

    自定义标签学习

    详细讲解了自定义标签的用法附带有案例,有代码案例,自定义标签的类的接口的说明,还有tld文件元素的说明

    jsp试卷带答案很全面

    3)当JSP页面执行自定义标签,遇到结束标签时将调用()方法执行处理。(选择一项) a) doStartTag() b) doEndTag() c) doInitBody() d) doAfterBody() 4) 在J2EE中,test.jsp文件中有如下一行代码...

    fckeditor的JSP详细配置(带有所有需要的包)

    这个是自己调试并整理过的fckeditor配置,并非网上照搬照抄的垃圾文档。包含有所有需要的包,配置... 1、要想实现上传必须用自定义标签方式引用。 2、SSH结合时上传功能失败,删除xalan.jar(这个包是读xml文件用的)

    jsp编程中,servlet向jsp中传递带有泛型的数组

    servlet类向jsp传递带泛型数组。泛型为自定义的bean

    JSP-Servlets-SQL-ConnectionPool:使用 Java EE servelets 和 jsp(JSTL 和 EL)的电子邮件列表动态 Web 应用程序

    使用的技术和指南本网站使用以下技术来正常工作: JSP(带有 JSTL、EL、包含和自定义标签) JSP &lt;c&gt; 标签转义字符并防止 XSS(跨站点脚本) JDBC 和准备好的语句以防止 SQL 注入攻击小服务程序JavaBean (User.class)...

    JSP发送邮件实例

    基于JSP邮件发送的实例,本人亲测,163邮箱中互发成功,其他的没时间测试。有兴趣的同志们可以试一下、、、 &lt;br&gt;环境:XP + JDK +TOMCAT6 &lt;br&gt;需要用到两个JAR包:mail.jar 和 activation.jar &lt;br&gt;这两个...

    JSP企富商贸网开发

    自定义商品属性,自定义商品简介魔板,自由增加一级页面数量,自由更换页面样式, 自由设定管理员权限,自由设定页面局部类型商品,在线调查,在线留言,团体购物, 自由设定友情链接和页面的关联,自由设定信息和...

    ATGrid报表控件 wintable报表设计器

    支持HTTP协议,带有异步同步交互接口,可以和后台程序轻松交互; 支持XML: 通过XML和后台数据库进行绑定,设定打印属性、样式等; 内嵌支持脚本语言开发: 使开发更灵活方便; 普通报表,套打报表,...

    editplus 代码编辑器html c++ jsp css

    ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名".txt",也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了...

    低清版 大型门户网站是这样炼成的.pdf

    11.4.1 展示层jsp 2+struts 2标签库实现 711 11.4.2 控制层struts 2实现 720 11.4.3 持久层hibernate 3实现 728 11.4.4 spring 2接管业务逻辑层 730 11.5 小结 733 第12章 站务必备—系统用户管理与流量统计 ...

    cms后台管理

    五 自定义标签及使用自己创建的表的实现过程 下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_mycontent的表,其中有id,title,content三个字段 其次,创建了一个实体类 public class ...

    用C ++实现的 RTS 游戏的 路径查找算法(A*、JPS、Wall-tracing)

    带有网格图的 RTS 游戏的路径查找算法的 C++ 实现。 如何使用 此代码用于我的类似 RTS 的游戏中,带有自定义内部引擎。我照原样复制它,没有实现许多类,如 vec2、Array、MemoryManager 等。所以如果有人想使用它,...

    Thymeleaf中文参考手册_3.0.5版

    Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP .1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的...

    thymeleaf_3.0.5_中文参考手册

    1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来...

Global site tag (gtag.js) - Google Analytics