`

编写自己的定制标记库(三)

阅读更多

如果看完了前两篇文章,那么想必想在基本已经可以搞出自己的定制标记库了。

在这里,再介绍一下怎么编写循环执行的定制标记

1.学习目标:编写一个实现了循环功能的定制标记。

2.编写标记处理类:

public class LoopTag extends TagSupport {
	private static final long serialVersionUID = 1L;
	private int times;
	
	public void setTimes(int times){
		this.times = times;
	}
	public int doStartTag(){
		System.out.println("1");
		return EVAL_BODY_INCLUDE;
	}
	public int doAfterBody(){
		System.out.println("2");

		if(times > 1){
			times--;
			return EVAL_BODY_AGAIN;
		}else{
			return SKIP_BODY;
		}
	}

LoopTag类继承了TagSupport类,定义了一个定制标记的属性times,它代表循环执行的次数。doAfterBody()方法只有当doStartTag()方法返回EVAL_BODY_INCLUDE时才被调用,因此在这里必须要重写doStartTag()方法,并且让该方法返回EVAL_BODY_INCLUDE。

 

在doAfterBody()方法中,每执行一次该方法,times值就减1,如果times值大于1,返回EVAL_BODY_AGAIN常量值,该返回值表示重复调用定制标记所包含的JSP页面内容;如果times值不大于1,返回SKIP_BODY常量值,该返回值表示不再调用定制标记所包含的JSP页面内容。

3.编写标记配置文件

util.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaeeweb-jsptablibrary_2_1.xsd"
     version ="2.1" >
     <tlib-version>1.0</tlib-version>
     <short-name>util</short-name>
     <uri>http://crazy.com/taglib/util</uri>
     <display-name>utilitytags</display-name>
     <description>custom web utility tags</description>
     <tag>
     	<name>Timer</name>
     	<tag-class>practice.TimerTag</tag-class>
     	<body-content>JSP</body-content>
     </tag>
     
     <tag>
     	<name>dateTime</name>
     	<tag-class>practice.DateTimeTag</tag-class>
     	<body-content>empty</body-content>
     	<attribute>
     		<name>date</name>
     		<requried>false</requried>
     		<rtexprvalue>true</rtexprvalue>
     		<description>input date</description>
     	</attribute>
     	<attribute>
     		<name>pattern</name>
     		<requried>false</requried>
     		<rtexprvalue>false</rtexprvalue>
     		<description>date time format pattern</description>
     	</attribute>
     </tag>
	
	<tag>
		<name>loop</name>
		<tag-class>practice.LoopTag</tag-class>
		<body-content>JSP</body-content>
		<attribute>
			<name>times</name>
			<requried>true</requried>
			<rtexprvalue>true</rtexprvalue>
			<description>loop times</description>
		</attribute>
	</tag>
    
</taglib>
 

4编写JSP页面

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="util" uri="http://crazy.com/taglib/util"%>
<html>
  <head></head>
  <body>



	<util:loop times="10">
	    <util:dateTime pattern= "yyyy年MM月  HH:mm:ss"/><br/>
	</util:loop>
  </body>
</html>

 部署一下 运行即可

 

 

0
0
分享到:
评论

相关推荐

    JSP定制标记使用手册

    2. **TILES定制标记库** TILES是一个流行的JSP标签库,它提供了一套用于构建可复用和模块化的页面布局的定制标记。TILES的核心概念是定义和插入“tiles”,即页面的各个部分。 - **INSERT标记**:INSERT标记用于...

    将定制标签库开发为标记文件

    这篇博客文章“将定制标签库开发为标记文件”深入探讨了如何创建自己的标签库,并将其转化为标记文件,以便在JSP页面中方便地使用。以下是对这一主题的详细阐述: 首先,我们来理解什么是自定义标签库。在Java Web...

    Struts标记库.chm

    在传统的JSP开发中,开发者通常需要编写大量的Java脚本来处理页面逻辑,而Struts标记库则通过提供一系列定制化的标签来实现这一目的,从而提高了代码的可读性和可维护性。 Struts标记库分为几个主要部分: 1. **...

    定制标签库

    "定制标签库"这个标题暗示了我们将在讨论如何构建和使用这样的库,以便更好地控制和扩展HTML的标记能力。 标签库(Tag Library)在JavaServer Pages (JSP) 和其他类似的服务器端技术中扮演着重要角色。它将可重用的...

    基于Java的实例源码-增强现实标记跟踪软件库 AccuTag.zip

    【描述】描述中的“基于Java的实例源码”表明这个AccuTag库是一个可编程的工具,开发者可以下载并研究其源代码,理解其工作原理,甚至根据自己的需求进行定制和扩展。增强现实标记跟踪是AR技术的关键组成部分,通过...

    java源码:增强现实标记跟踪软件库 AccuTag.zip

    这个库的核心功能是识别和跟踪特定的图像标记,这些标记可以是二维条形码或者定制的图案,通过摄像头捕捉到这些标记后,AccuTag能够实时地将虚拟信息叠加到真实世界中,实现增强现实的效果。 1. **Java编程语言**:...

    pytest定制自动化测试编写规范.pdf

    pytest是Python语言中广泛使用的第三方单元测试框架,相较于标准库中的unittest,pytest具有更为简洁的语法和更高的执行效率。它支持超过315种插件,使得测试工作更加灵活和可扩展。pytest不仅能够处理单元测试,还...

    基于java的增强现实标记跟踪软件库 AccuTag.zip

    AccuTag是一款基于Java开发的增强现实(AR)标记跟踪软件库,专为开发者提供高效、精准的标记识别和跟踪功能。在AR技术中,标记是实现虚拟与现实世界交互的关键元素,它们可以是二维条形码、二维码或特定图案,通过...

    ppt课件-第6章 JSP自定义标记.zip

    - **扩展性**:通过添加新的标记库,可以轻松扩展JSP应用的功能。 通过学习和实践JSP自定义标记,开发者可以构建出更高效、更可维护的Web应用。同时,了解和掌握自定义标记也是成为熟练JSP开发者的必经之路。

    Python打造出适合自己的定制化Eclipse IDE

    Eclipse IDE是一个强大且可扩展的开发环境,而通过集成Python,我们可以创建适合自己需求的定制化版本。本文主要介绍如何利用Python和Eclipse的扩展框架EASE来实现这一目标,使得无需编写Java代码也能实现自定义功能...

    extjs扩展标记

    3. **EXTTLD**:EXTTLD文件是EXTJS扩展标记库的描述文件,它定义了EXTJS JSP标签的属性、事件、默认值等。开发者可以通过EXTTLD文件定制EXTJS标签的行为,比如添加新的属性、扩展已有标签的功能。 4. **使用与集成*...

    libpandoc:C绑定到Pandoc,这是用Haskell编写的标记转换器库

    要使用libpandoc,开发者需要了解C语言,并且需要将库编译链接到自己的项目中。在完成编译后,可以通过libpandoc提供的API调用来执行转换任务,如读取输入文件、设置转换参数、选择输出格式以及保存转换后的结果。 ...

    JSTL Step by Step 中文教材.pdf

    它于2002年6月发布了1.0版本,并由四个定制标记库和一对通用标记库验证器组成。 #### 二、JSTL 1.0 版本概述 JSTL 1.0版本主要包含了以下几个部分: - **核心标记库(Core Tag Library)**:提供了一组常用功能,...

    基于jq+htmlde库存日历插件

    首先,jQuery是JavaScript的一个库,它简化了JavaScript的DOM操作、事件处理、动画制作和Ajax交互。在库存日历插件中,jQuery被用来处理用户与日历元素的交互,如点击日历上的日期、滑动切换月份等。通过使用jQuery...

    基于amplitudeJS开源HTML5网页音频库编写的音乐播放器.zip

    【标题】:“基于amplitudeJS开源HTML5网页音频库编写的音乐播放器” 【描述】:“html5开发” 在这个项目中,我们关注的是利用HTML5技术来开发一个音乐播放器,特别是通过集成amplitudeJS这一开源的HTML5网页音频...

    jstl教程

    JSTL 1.0主要由四个定制标记库和两个通用标记库验证器组成: 1. **Core标记库**:提供了用于数据管理、迭代、条件操作以及URL生成和操作的标签。这些标签帮助开发者管理页面内的数据流,控制内容的展示方式,以及...

    测试swift资源库资源库

    9. **单元测试和集成测试**:对于资源库的测试,需要编写单元测试来验证各个组件的功能,以及集成测试确保不同组件协同工作。 通过以上分析,"测试swift资源库资源库"这个项目涵盖了Swift编程、iOS开发、地图服务...

    JavaScript_请随意使用FLASHMD,记得在分叉后标记Repo.zip

    "Flash-Md"可能是其中一个这样的库,可能提供了额外的功能,比如动画效果、交互性或者其他定制化选项,使得Markdown的渲染更加生动和吸引人。 在使用这个库之前,开发者首先需要解压"Flash-Md_main.zip",里面可能...

    Node.js-Raneto是一个开源的知识库平台它使用静态的Markdown文件来为知识库提供支持

    此外,Raneto还支持自定义主题,让你可以根据自己的品牌或喜好定制界面。 **四、Markdown的优点** 1. **简洁性**:Markdown语法简单直观,学习曲线低,使得任何人都能快速上手编写文档。 2. **可读性**:Markdown...

Global site tag (gtag.js) - Google Analytics