JSTL自定义

JSTL自定义

  • 函数 ${fn:xxxx}

  1. 自己描述一个类
  2. 类中描述自己的方法(方法必须是静态的 因为不需要创建对象才能调用) 
    方法通常有返回值
  3. 描述【配置】一个"说明书" ----> xxx.tld 文件 用来作为说明书
    ---在当前工程的web文件夹中的WEB-INF文件夹下 创建一个XML Configure File 的JSP Tag Library Descriptor 的后缀为 .tld 的文件  用来描述我们自己写的标签库类
  4. 如何描述呢 

        其中 <short-name> 表示前缀  ,<uri> 表示路径  且这两个必须描述 

 

 这是最简单的自定义JSTL函数  可以在                此基础上扩展 
在JSP头部声明头信息 
        <%@ taglib prefix="mf" uri="http://wmnb.com" %>
         然后使用这个函数  ${ mf:add(12,13) }

  • 标签 <c:xxxx>

        自定义标签 每一个标签都是一个单独的类
  1. 创建一个类(用来描述 一个标签)  
            需要遵循规则 实现一个Tag接口 重写里面的方法
            最重要的两个方法
    doStartTag   doEndTag   
  2. 两组对应的 get/set 方法 自己补全 并添加相应的私有属性    
        还有一个 单独的方法 release方法 回收对象 
        doStartTag   doEndTag   

        在 doStartTag   doEndTag  方法内添加自己的逻辑
返回Tag接口的常量 用来指示JSTL框架下一步怎么做 
常量:
                Tag.EVAL_BODY_INCLUDE;
                Tag.SKIP_BODY;
                Tag.EVAL_PAGE;
                Tag.SKIP_PAGE

                可以根据某些条件决定是否包含标签主体内容,可以使用
                        Tag.EVAL_BODY_INCLUDE   --包含
                                或 Tag.SKIP_BODY。---跳过 
                如果需要继续处理页面的后续内容,可以返回 Tag.EVAL_PAGE。
                如果要立即停止页面的处理,可以返回 Tag.SKIP_PAGE

给标签写说明书

先描述shortname 和 uri  

 

public class MyOut implements Tag {
    private PageContext pageContext;
    public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; }
    public PageContext getPageContext(){ return this.pageContext; }
    
    private Tag parent ;
    public void setParent(Tag tag) { this.parent = tag; }
    public Tag getParent() { return this.parent; }
    //======================================
   //  <c:out value="val">  doStartTag表示加载完这句头标签后 做的事
    //  </c:out>            doEndTag  表示加载尾标签做的事
    private String value;
    public void setValue(String value){this.value=value;}
    public String getValue(){return this.value;}
    public int doStartTag() throws JspException {
        return 0;
    }

    public int doEndTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.write(value);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public void release() {  }//释放 相当于servlet的destory方法
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值