自定义标签ForEach

一个可实现任何数据类型的foreach(如List、set、map、各种数组)的foreach自定义标签,用SimpleTagSuppert子类实现

1.定义三个变量,var和items是标签的属性,Collection collection用来临时存储items的一般类型,定义set方法

首先新建实现了SimpleTagSuppert的ForEachTag类

然后定义set方法如下

public void setItems(Object items) {
        this.items=items;
        if(items instanceof Collection){
            collection=(Collection) items;
        }
        if(items instanceof Map){
            Map map=(Map) items;
            collection=(map.entrySet());
        }
        if(items.getClass().isArray()){
            collection=new ArrayList();
            int length=Array.getLength(items);
            for(int i=0;i<length;i++){
                collection.add(Array.get(items, i));
            }
        }
    }
    public void setVar(String var) {
        this.var = var;
    }

最后覆盖父类方法doTag方法

        @Override
    public void doTag() throws JspException, IOException {
        Iterator it=this.collection.iterator();
        while(it.hasNext()){
            Object value=it.next();
            this.getJspContext().setAttribute(var, value);
            this.getJspBody().invoke(null);
        }
    }    

2.配置tld文件,一个name,两个属性

<tag>
        <name>foreach</name>
        <tag-class>com.jamsbwo.tag.ForeachTag</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <name>var</name>
            <required>true</required>
            <rtexprvalue>false</rtexprvalue>
        </attribute>

        <attribute>
            <name>items</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

3.jsp测试

<body>
<br>----------------------LIST----------------------<br>
<%
    List list=new ArrayList();
    list.add("aaaaaa");
    list.add("BBBBBB");
    list.add("cccccc");
    list.add("dddddd");
    list.add("EEEEEE");
    list.add("ffffff");
    request.setAttribute("list", list);
%>
<j:foreach items="${list }" var="str">
    ${str }
</j:foreach>
<br><br>---------------------MAP-----------------------<br>
<%
    Map map=new HashMap();
    map.put("0", "aaa");
    map.put("1", "bbb");
    map.put("2", "ccc");
    map.put("3", "ddd");
    map.put("4", "eee");
    map.put("5", "fff");
    map.put("6", "ggg");
    request.setAttribute("map", map);
%>
<j:foreach items="${map }" var="str">
    ${str.key }.....${str.value };
</j:foreach>
<br><BR>-------------------------------ARRAY-------------------------------<br>
----------------------INT----------------------<br>
<%
    int []inum=new int[]{10,40,54,265};
    request.setAttribute("inum", inum);
%>
<j:foreach items="${inum }" var="str">
    ${str }
</j:foreach>
<br>----------------------BOOLEAN----------------------<br>
<%
    boolean [] bnum=new boolean[]{true,true,false,true,false};
    request.setAttribute("bnum", bnum);
%>
<j:foreach items="${bnum }" var="str">
    ${str }
</j:foreach>
<br>----------------------DAOBLE----------------------<br>
<%
    double dnum[]=new double[]{1.2,5521.12,54,36.5,8485.5};
    request.setAttribute("dnum", dnum);
%>
<j:foreach items="${dnum }" var="str">
    ${str }
</j:foreach>
</body>

时间: 06-27

自定义标签ForEach的相关文章

标签处理器类(自定义标签)ForEach

该处理器的 父类  javax.servlet.jsp.tagext.SimpleTagSupport public class ForEach extends SimpleTagSupport { private Collection<?> items; public void setItems(Collection<?> items) { this.items = items; } private String var; public void setVar(String va

【自定义标签开发】09-标签案例-开发foreach标签

我们接下来开发一个迭代集合的标签.我们知道struts中有一个<s:iterator>标签用来迭代集合,我们接下来模仿它写一个自定义标签. 前台的效果如下: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="/example" prefix="z" %>

Javaweb学习笔记6—EL表达式与JSTL及自定义标签

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.EL表达式 1,EL简介 Expression Lan

自定义标签

1 如果在jsp页面中写java代码 是很不合适的 而且坏处很多像这样: <%@page import="java.util.ArrayList"%><%@page import="java.util.List"%><%@page import="com.atguigu.javaweb.Customer"%><%@ page language="java" contentType=&q

自定义标签文件(二)

开发自定义标签,实现标准标签c:foreach相同的功能.以下是关键代码: 实现迭代的标签处理类ForeachTag.java 1 package com.abc; 2 3 import java.io.IOException; 4 import java.lang.reflect.Array; 5 import java.util.*; 6 7 import javax.servlet.jsp.JspException; 8 import javax.servlet.jsp.tagext.Si

JavaWeb之自定义标签&amp;JSTL&amp;国际化(九)

自定义标签 简介 自定义标签由于没练习,所以掌握的不是很深,但是对于我而言足够可以应付用户登录注册案例和购物车案例,有时间还是多了解的好 1. 自定义标签简介 1.作用:替换JSP页面中的java脚本(<%%>).(官方推荐:JSP2.0开始) 2. 开发步骤 1. 自定义一个类继承SimpleTagSupport实现doTag方法 2. WEB-INF,建立tld文件,定义标签地址/定义标签内容 3. jsp页面使用taglib指令引入uri地址,prefix定义标签名,直接在页面调用这个标

JavaWeb学习之JSTL自定义标签库的使用、JSTL自定义函数库(7)

一.自定义标签,步骤 * 确定需求 * <my:date /> 输出当前系统的时间 yyyy-MM-dd hh:mm:ss:SSS * 编写Java类 新建包名:com.yxl.tag,新建类MyDateTag,实现SimpleTag接口 * 只要与此接口有关的实现类,javax.servlet.jsp.tagext.JspTag * 需要实现具体的接口 * javax.servlet.jsp.tagext.SimpleTag,简单标签,JSP2.0**,选择这个 * javax.servle

自定义标签案例

(1).用自定义标签模仿完成if功能 首先写一个标签处理类 package com.gqx.a_tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class IfTag extends SimpleTagSupport { //添加属性 private boolean test; publi

学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1.内置标签(动作标签): <jsp:forward />转发标签: 语法:<jsp:forward page="