`

jsp标签编程『下』---开发迭代标签

阅读更多

开发一个迭代标签,此标签只可以对list进行迭代(学习)。

IterateTag.java:

package com.keith.tag;

import java.util.Iterator;
import java.util.List;

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

public class IterateTag extends TagSupport {
	// 属性名称
	private String name;
	// 属性保存范围
	private String scope;
	// 每次迭代的对象
	private String id;
	// 所以接受到的数据
	private Iterator<?> iter;

	@Override
	public int doStartTag() throws JspException {
		Object value = null;
		// 是否是page范围
		if ("page".equals(this.scope)) {
			value = super.pageContext
					.getAttribute(name, PageContext.PAGE_SCOPE);
		} else if ("request".equals(this.scope)) {
			// 是否是request范围
			value = super.pageContext.getAttribute(name,
					PageContext.REQUEST_SCOPE);
		} else if ("session".equals(this.scope)) {
			// 是否是session范围
			value = super.pageContext.getAttribute(name,
					PageContext.SESSION_SCOPE);
		} else {
			// 是否是application范围
			value = super.pageContext.getAttribute(name,
					PageContext.APPLICATION_SCOPE);
		}

		//如果是List接口的实例
		if (value != null && value instanceof List<?>) {
			//像List接口进行向下转型
			this.iter = ((List<?>) value).iterator();
			if (iter.hasNext()) {
				super.pageContext.setAttribute(id, iter.next());
				//执行标签体内容
				return TagSupport.EVAL_BODY_INCLUDE; 
			}else{
				//退出标签执行
				return TagSupport.SKIP_BODY;
			}
		} else {
			//不是List接口实例,不处理
			//退出标签执行
			return TagSupport.SKIP_BODY;
		}
	}

	
	@Override
	public int doAfterBody() throws JspException {
		//判断是否还有内容
		if (iter.hasNext()) {
			super.pageContext.setAttribute(id, iter.next());
			//重复执行标签体
			return TagSupport.EVAL_BODY_AGAIN;
		}else{
			//退出标签执行
			return TagSupport.SKIP_BODY;
		}
	}


	public String getName() {
		return name;
	}

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

	public String getScope() {
		return scope;
	}

	public void setScope(String scope) {
		this.scope = scope;
	}

	public String getId() {
		return id;
	}

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

	public Iterator<?> getIter() {
		return iter;
	}

	public void setIter(Iterator<?> iter) {
		this.iter = iter;
	}

}

 iteratetag.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/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    <!-- 标签库的版本 -->
	<tlib-version>1.0</tlib-version>
	<!-- 为标签苦在TLD中的描述名称 -->
	<short-name>iteratetag</short-name>
	<tag>
	<!-- 表示标签在JSP中的使用名称 -->
 		<name>iterate</name>
 		<!-- 表示这个标签所这项的Class -->
 		<tag-class>com.keith.tag.IterateTag</tag-class>
		<!-- 标签体内容为空 -->
 		<body-content>JSP</body-content>
 		<attribute>
 		<!-- format为属性名 -->
 			<name>id</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>

 		<attribute>
 		<!-- format为属性名 -->
 			<name>name</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
 		
 		<attribute>
 		<!-- format为属性名 -->
 			<name>scope</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
	</tag>
</taglib>

 web.xml:

  <taglib>
  		<taglib-uri>iterate</taglib-uri>
  		<taglib-location>/WEB-INF/iteratetag.tld</taglib-location>
  </taglib>

 index.jsp:

<%@ page import="java.util.*" %>
<%@ taglib prefix="iteratetag" uri="iterate"%>

  <body>
	<%
		List<String> all = new ArrayList<String>();
		all.add("java");
		all.add("linux");
		all.add("C");
		request.setAttribute("all",all);
	 %>
	<iteratetag:iterate name="all" scope="request" id="url">
		${url }<br />
	</iteratetag:iterate>
  </body>
分享到:
评论

相关推荐

    JAVAWEBjsp通用标签与迭代标签

    以下是关于`&lt;c:forEach&gt;`、`&lt;c:out&gt;`、`&lt;c:set&gt;`和`&lt;c:remove&gt;`这四个JSP标签的详细解释。 1. `&lt;c:forEach&gt;`:这是JSP中的迭代标签,用于遍历集合或数组。它可以在HTML或其他内容中重复渲染一段代码。例如,如果你...

    计算机软件-编程源码-JSP网页编程.zip

    7. **JSTL(JavaServer Pages Standard Tag Library)**:是一套标准的标签库,提供了处理常见任务如迭代、条件判断、XML处理等功能,旨在减少JSP页面中的脚本代码。 8. **Servlet**:虽然不是JSP的一部分,但与之...

    Java Web编程-高级-标签

    在Java Web开发中,标签(Tags)是一种强大的工具,它使得...在提供的"Java Web编程-高级-标签.ppt"和"Java Web编程-高级-标签-例子"中,你将找到更多关于这些概念的详细解释和示例代码,帮助你更好地掌握这一领域。

    jsp高级编程(关于jsp编程的很好的电子书)

    它包括核心标签、JDBC标签、XML标签等多个部分,可以实现条件判断、迭代、数据库操作等功能。 **JSP的高级特性**: 1. **页面指令的自定义属性**:允许开发者扩展JSP页面的行为,例如定制错误处理、引入自定义标签...

    JSP网络编程从基础到实践

    EL提供简洁的方式来访问和操作JSP中的数据,而JSTL则包含了一系列预定义的标签,用于处理常见的任务,如迭代、条件判断、XML处理等。 实战部分,本教程会提供大量实例,涵盖JSP与数据库的连接、文件上传下载、用户...

    jsp标签开发

    在JSP标签开发中,源码通常指的是Tag Handler Class的实现,这需要一定的Java编程基础。而工具可能包括IDE插件(如Eclipse或IntelliJ IDEA的JSP支持)、TLD生成器以及版本控制工具(如Git)等,这些工具能帮助开发者...

    JSP 程序设计------经典实例

    JSTL是一组标准标签库,提供了一系列标签来处理常见的任务,如迭代、条件判断、XML处理等,提高了代码的可读性和可维护性。 8. **Servlet与JSP的关系** JSP最终会被翻译成Servlet,Servlet是JSP的后台处理引擎。...

    计算机软件-编程源码-JSP学习指南.zip

    6. **JSTL(JavaServer Pages Standard Tag Library)**:一套标准的JSP标签库,提供用于处理常见任务的标签,如迭代、条件语句、XML处理等,以减少脚本的使用。 7. **Servlet与JSP的关系**:JSP本质上是Servlet的...

    ppt课件-第四章 JSP编程.zip

    **第四章 JSP编程** JavaServer Pages(JSP)是Java平台上的一个重要组成部分,它是一种动态网页开发技术,主要用于创建交互式的、数据驱动的Web应用。JSP在1999年由Sun Microsystems推出,旨在简化Java Web应用的...

    jsp编程实例

    - 适当使用JSP标签,提高代码复用性。 - 合理利用内置对象,避免过度依赖session。 通过上述"jsp编程实例"的学习,开发者可以更好地理解和掌握JSP技术,从而创建功能丰富的、高性能的Web应用程序。实践是学习的...

    jsp标签库jar

    **JSP标签库(JSP Tag Libraries)与JSTL** JSP标签库是JavaServer Pages技术的一个重要组成部分,它允许开发者使用预定义的标签来增强HTML或XML文档的可读性和可维护性。这些标签通常封装了复杂的业务逻辑或者常见...

    jsp标签库(详细)

    JSP标签库是JSP技术的重要组成部分,它们是一系列预定义的、可复用的代码片段,用于简化页面开发过程,提高开发效率。本文将深入探讨JSP标签库的原理、使用方法及如何自定义标签。 #### JSP标签库的核心价值 JSP...

    JSP编程

    综上所述,JSP编程是构建动态Web应用的重要技术,通过理解JSP的基础概念、工作原理以及与相关技术的结合,开发者能够更好地掌握Web应用的开发。通过深入学习如JSP高级编程这样的资料,开发者可以进一步提升在JSP领域...

    jsp网络编程——源文件(01——05)

    - JSTL简化了JSP代码,提供了处理迭代、条件、XML、函数等功能的标签。 - EL简化了数据访问,允许在JSP页面中直接访问作用域内的对象。 - 动作元素如jsp:include、jsp:forward和jsp:params用于控制页面流程。 5....

    JSP经典例子教程-100例

    ### JSP经典例子教程-100例 ...JSP标签库(JSTL)提供了许多预定义的标签,可以简化常见的编程任务,如条件处理、迭代等。下面的示例展示了如何使用`c:out`标签来输出文本: ```jsp ;charset=GB2312" %&gt; ...

    jsp简单标签的使用

    总结起来,学习和熟练使用JSP的简单标签是Web开发中必不可少的步骤,它可以帮助开发者快速构建动态网页,同时保持代码的清晰和整洁。通过深入理解内置标签的功能,以及如何创建和使用自定义标签,可以提升JSP编程的...

    jsp网络编程从基础到实践源代码.rar

    7. **自定义标签**:创建自定义的JSP标签,增强代码复用性。 8. **异常处理**:学习如何在JSP中捕获和处理异常。 9. **国际化**:实现多语言支持,为不同地区的用户提供本地化服务。 10. **安全机制**:理解如何进行...

    JSP WEB 编程指南

    **JSP(Java Server Pages)WEB编程指南** JSP(Java Server Pages)是Java平台上的一个服务器端技术,用于创建动态网页。它结合了HTML、Java代码和Java Servlet技术,使得开发者可以在网页上嵌入Java代码,从而...

    jsp页面java标签库

    在JSP页面中,Java标签库扮演着至关重要的角色,它允许开发者使用预先定义好的标签执行各种操作,例如数据输出、流程控制、迭代处理以及异常处理等。 JSP自带的核心标签库中,包含了许多用于简化Web开发的标签。...

    计算机软件-编程源码-JSP and XML.zip

    在JSP中,开发者可以将HTML代码与Java代码混合编写,但最佳实践推荐使用JSP标签库(如JSTL)来减少脚本的使用,提高可维护性。 1. **JSP元素:** JSP有五种基本元素,包括指令(directives)、声明(declarations)...

Global site tag (gtag.js) - Google Analytics