自定义标签的使用(总结)

引入jstl.jar、standard.jar

一、最简单的自定义标签()

1、编写继承SimpleTagSupport

public class MyTag extends SimpleTagSupport {

    @Override
    public void doTag() throws JspException, IOException {
        getJspContext().getOut().write("hello walker");
    }
}

2、表现tld文件,放在WEB-INF下


    A tag library exercising SimpleTag handlers.
    1.0
    SimpleTagLibrary
    mytid

    
        Outputs a colored tile
        hello
        Test.MyTag
        empty
    

注:属性说明

  • description //描述信息
  • tlib-version //指定标签库的版本号,基本不用我们操心
  • short-name //指定标签库的短名字,也是没什么用
  • uri //这是一个重要的子元素,是该标签库的唯一标识
  • tag //看名字就知道,这是定义标签的子元素,很重要 

   tag标签的属性说明

  • description //描述信息
  • name //该标签的唯一标识,很重要
  • tag-class //指定了处理该标签的类,也就是使用该标签谁给我返回结果
  • body-content //标签体,后面详说,很重要
  • attribute //属性,后面介绍,很重要

3、调用

<%@taglib uri="mytid" prefix="SimpleTagLibrary" %>  

 

二、带属性的自定义标签

  1、自定义标签类的编写

public class MyTag extends SimpleTagSupport {

    private String map;
    public String getMap(){
        return this.map;
    }
    public void setMap(String map){
        this.map = map;
    }
    @Override
    public void doTag() throws JspException, IOException {
        HashMap maps = (HashMap)(getJspContext().getAttribute(map));
        Object[] array = maps.keySet().toArray();

        for (String str : maps.keySet()){
            getJspContext().getOut().write("");
            getJspContext().getOut().write("");
            getJspContext().getOut().write(str);
            getJspContext().getOut().write("");
            getJspContext().getOut().write("");
            getJspContext().getOut().write(""+maps.get(str));
            getJspContext().getOut().write("");
            getJspContext().getOut().write("");
        }
    }
}

2、tld

 


    A tag library exercising SimpleTag handlers.
    1.0
    SimpleTagLibrary
    mytid

    
        Outputs a colored tile
        hello
        Test.MyTag
        empty
        
            map
            true
            true
        
    

注:

required:该属性是否必须

rtexprvalue:当前属性是否可接受运行时表达式的动态值

3、使用

<%
    HashMap maps = new HashMap();
    maps.put("李四",53);
    maps.put("张三",23);
    maps.put("walker",22);
    pageContext.setAttribute("map",maps);
  %>
      
      

 

三、带标签体自定标签

 1、自定义标签类

/**
 * 带标签体的标签
 * @author Administrator
 *
 */
public class IteratorTag extends SimpleTagSupport{
    //标签属性,省去getter,setter
    private String collection;
    private String item;

    @Override
    public void doTag() throws JspException, IOException {
        //从page scope中获取属性名为collection的集合
        Collection itemList=(Collection) getJspContext().getAttribute(collection);
        //遍历集合
        for (Object object : itemList) {
            //将集合的元素设置到page范围
            getJspContext().setAttribute(item,object);
            //输出标签体
            getJspBody().invoke(null);
        }
    }
}

2、tld

A tag library exercising SimpleTag handlers.
    1.0
    myTaglib
    http://www.chinaebi.org/myTaglib
    
        iterator
        com.chinaebi.test.IteratorTag
        scriptless
        
            collection
            true
            true
        
        
            item
            true
            true
        
    

注:body-content说明

  • tagdependent:指定标签处理类自己负责处理标签体。
  • empty:指定该标签只能作用空标签使用。
  • scriptless:指定该标签的标签体可以是静态 HTML 元素,表达式语言,但不允许出现 JSP 脚本。
  • JSP:指定该标签的标签体可以使用 JSP 脚本。

3、使用

<%
    List list= new ArrayList();
    list.add("java");
    list.add("c++");
    list.add("php");
    pageContext.setAttribute("list",list);
    %>
    
        
${item}

 

你可能感兴趣的:(java,JavaWeb)