开发一个foreach标签

news/2024/5/18 14:57:49 标签: 标签, jstl

标签和sun公司的一样可以迭代Map,List,数组

jsp文件为

<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/simple" prefix="c"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>foreach tag</title>
</head>
<body>
	<%
		List list = new ArrayList();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		request.setAttribute("list", list);
	%>
	<c:foreach var="str" items="${list}">
		${str }
	</c:foreach>
	<br>------------------------------<br>
	<%
		Map map = new HashMap();
		map.put("aa", "111");
		map.put("bb", "222");
		map.put("aa", "333");
		request.setAttribute("map", map);
	%>
	<c:foreach var="entry" items="${map }">
		${entry.key } = ${entry.value }
	</c:foreach>
	
	<br>------------------------------<br>
	
	<%
		Integer num[] = {1,2,3,4}; 
		request.setAttribute("num", num);
	%>
	<c:foreach var="i" items="${num }">
		${i }
	</c:foreach>
	<br>------------------------------<br>
	
	<%
		int arr[] = {1,2,3,4}; 
		request.setAttribute("arr", arr);
	%>
	<c:foreach var="i" items="${arr }">
		${i }
	</c:foreach>
</body>
</html>
标签处理器为

package cn.itcast.web.tag;

import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

//开发foreach标签
public class ForeachTag extends SimpleTagSupport {

	private Object items;
	private String var;
	
	//单列或双列集合存储至此
	private Collection collection;
	
	public void setItems(Object items) {
		this.items = items;
		
		//将map转为单列集合
		if(items instanceof Map){
			Map map = (Map) items;
			collection = map.entrySet();
		}
		
		if(items instanceof Collection){
			collection = (List) items;
		}
		
		//统一对数组进行处理
		if(items.getClass().isArray()){
			this.collection = new ArrayList();
			int length = Array.getLength(items);
			for(int i=0; i<length; i++){
				Object value = Array.get(items, i);
				collection.add(value);
			}
		}
		
		
		/*if(items instanceof Object[]){
			Object[] obj =  (Object[]) items;
			collection = Arrays.asList(obj);  //此方法接受一个对象
		}*/
		
	}
	
	public void setVar(String var) {
		this.var = var;
	}
	
	@Override
	public void doTag() throws JspException, IOException {
		
		Iterator it = collection.iterator();
		while(it.hasNext()){
			Object obj = it.next();
			//对象存在域中
			this.getJspContext().setAttribute(var, obj);
			//标签执行
			this.getJspBody().invoke(null);
		}
	}
	
	
}

要记得在tld中对标签描述

  <tag>
        <name>foreach</name>
		<tag-class>cn.itcast.web.tag.ForeachTag</tag-class>
		<body-content>scriptless</body-content>
		
		<attribute>
			<name>var</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		
		<attribute>
			<name>items</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
    </tag>




http://www.niftyadmin.cn/n/1695264.html

相关文章

Oracle到SAP HANA实时复制系列(一):初识SRS

引言 随着公司业务的不断扩大&#xff0c;为了解决集中式数据库系统的数据访问瓶颈&#xff0c;很多公司开始采用分布式数据库系统来解决这个问题。但分布式数据库系统中多个数据库之间的数据一致性问题和数据实时复制是其中的一道难题&#xff0c;SRS&#xff08;Sybase Repli…

关于rabbitMq确认的那点事

关于rabbitMq确认的那点事 平时工作中经常用到queue,但只停于用而不知道原理。对于工作多年码农所忌讳的事。 好。。这里就拿典型的rabbitMQ为研究对象(当然&#xff0c;工作中也一直使用着它) 今天就来说说消息防丢失的事。 首先rabbitMQ消息防丢失有两种手段。 1、事务 2、确…

博客搬家到csdn

博客搬家到csdn上&#xff0c;地址&#xff1a;http://blog.csdn.net/blackproof

自定义BufferedReader的两个方法

展示read(),和readLine()方法 public class MyBufferedReader {private FileReader f;// 定义一个数组作为缓冲区private char[] buf new char[1024];// 定义一个指针用来操作数组中的元素&#xff0c;当操作到最后一个元素后指针归零private int pos 0;// 定义一个计数器用来…

在虚拟机环境下搭建自己的SAP HANA数据库学习环境

SAP HANA是一个全新设计的内存数据库系统&#xff0c;他即支持传统的行式存储也支持列式存储。HANA数据库具有很高的性能、并发能力和可扩展性。HANA即可以支持OLTP应用也可以支持OLAP系统。 我们都知道&#xff0c;制约数据库系统性能提升的关键瓶颈是I/O。为了解决这个问题&a…

集合遍历

1、使用增强的for循环 1 HashMap hashMapnew HashMap(); 2 hashMap.put("name","张三"); 3 hashMap.put("age",12); 4 hashMap.put("score",90); 5 for (Object key:hashMap.keySet()){ 6 …

SAP*和DDIC用户被锁分析与解决方案

SAP*和DDIC这两个用户是SAP系统默认的两个超级用户&#xff0c;安装之后自动就会在系统中存在&#xff0c;默认密码可以在安装的时候指定&#xff0c;安装之后也可以进行修改。这两个用户的权限也是最大的&#xff0c;拥有SAP_ALL权限。但是有时系统管理员会遇到忘记密码或者这…

装饰设计模式初探

是为了增强某个对象的功能&#xff0c;装饰和继承都能实现增强功能&#xff0c;装饰可以防止继承体系过于庞大 package cn.itcast.wrapper;/*** * author Administrator**/ public class Wrapper {public static void main(String[] args) {Person p new Person();//p.eat();N…