jstl的自定义标签

1、新建menu.tld

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>t</short-name>
    <uri>/menu-tags</uri>
    <display-name>"自定义标签"</display-name>

    <!-- 菜单生成控件 -->
    <tag>
        <name>menu</name>
        <tag-class>com.uu.yy.common.tag.MenuTag</tag-class>
        <body-content>JSP</body-content>
        <display-name>左侧菜单生成控件</display-name>
        <small-icon>111</small-icon>
        <description>左侧菜单生成控件可选样式ace,bootstrap</description>
        <attribute>
            <name>menu</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <description>菜单信息</description>
        </attribute>
    </tag>

</taglib>

2.实体

package com.uu.yy.common.tag;

import java.io.IOException;
import java.util.List;
import java.util.Random;
import javax.servlet.ServletContext;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;


public class MenuTag extends TagSupport {
    private static final long serialVersionUID = 1L;
    protected Menu menu;//菜单
    public Menu getMenu() {
        return menu;
    }

    public void setMenu(Menu menu) {
        this.menu = menu;
    }

    public int doStartTag() throws JspTagException {
        return EVAL_PAGE;//继续处理页面,让服务器继续执行页面 )
    }

    public int doEndTag() throws JspTagException {
        try {
            JspWriter out = this.pageContext.getOut();
            //out.print("标签示例");
            out.print(menu);


        } catch (IOException e) {
            e.printStackTrace();
        }
        return EVAL_PAGE;
    }



}

3、jsp中引入

<%@ taglib prefix="t" uri="/menu-tags"%>

4、jsp使用示例

 <t:menu></t:menu>         
    可套入自定义funs函数
 <t:menu menu="${fns:getTopMenu()}"></t:menu> 

摘要:

标签中静态常量: 
EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流 
SKIP_BODY:告诉服务器不要处理正文内容 
EVAL_PAGE:让服务器继续执行页面 
SKIP_PAGE:让服务器不要处理剩余的页面 
EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回 
EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回 
EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。


他们执行顺序如下: 
doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag() 

doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY, 
如果返回EVAL_BODY_INCLUDE则继续执行; 
如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行, 
而直接执行doEndTag()方法。 

setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。 
标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY, EVAL_PAGE或SKIP_PAGE。 
如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 
如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分; 
如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值