博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义taglib标签
阅读量:6650 次
发布时间:2019-06-25

本文共 2196 字,大约阅读时间需要 7 分钟。

hot3.png

     最近在项目过程中遇见了自定义标签这个方法,主要实现了字典式的数据搜索。先在全局文件中定义了某特性属性的开头编码  如:  学期  ,定义开头为  9527    然后9527 加1即  95271为第1学期,95272为第二学期,一次类推。然后通过自定义标签的方式,在数据库拿到1后和9527进行拼接,在画面进行判断显示当前学期 。换个例子。。。 ‘特征’ 的前缀为 12306   123061为帅 123062为丑之类的。。。(举得不太好,但是就是这种用法),我见了觉得很有意思,于是自己简单写了一个很弱鸡的例子。其实在工作中很少会去自定义标签,所以只需大体理解其思想即可,以下只为很浅的举例。

 

1.首先需要定义一个tld文件(taglib的配置文件),一般选择在web-inf/下目录中建立

2.需要定义xml头信息 <?xml version="1.0" encoding="UTF-8"?> 这个一般貌似好像自带。。。

3.需要引入dtd约束,方便书写代码,下面这个版本可能有点老了,反正能先用着。。。

<!DOCTYPE taglib 
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" 
    "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">

4.需要设定参数值

     1.taglib版本,2.适用jsp版本,3.推荐prefix头,4.jsp中tld文件uri引用时的路径别名。也可以在jsp直接写该tld文件位置来代替这个路径别名

    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>nmy</short-name>
    <uri>http://oidgeduc.dictionary/display</uri>

5.设定tag内容,即画面要调用的方法 类似于常用的 c:if  后面的if就是你定义的方法

   1.设定name属性,即画面方法名, 

   2.tag-class实现类,即调用你定义的方法时,所做处理的类

   3.attribute为参数,参数中,name为参数名,required是否为必填,rtextprvalue是否可以动态指定,即是否可以通过类似于el表达式这样填入变量->oneP=${变量}

   4.type数据类型

   5.具体代码如下:

    <tag>
        <name>sum</name>
        <tag-class>
            com.ntt.tag.taglibService
        </tag-class>
        <attribute>
            <name>oneP</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.Integer</type>
        </attribute>
        <attribute>
            <name>twoP</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.Integer</type>
        </attribute>
    </tag>

6.上述定义完taglib的配置文件后,需要对书写处理类,即tag-class标签中定义的类。

   代码如下所示:

public class taglibService extends TagSupport{

    private Integer oneP;    //此处是taglib配置中作为参数传入,会注入到其中
    private Integer twoP;
    
    public int doStartTag() throws JspException {

        // 通过pageContext.getRequest()拿到request对象,放入最后的求和值,以便前台取出

        pageContext.getRequest().setAttribute("sum", oneP + twoP);
        return SKIP_BODY;  //返回值为SKIP_BODY 表示执行的时候,需要页面等待
    }

    public Integer getOneP() {

        return oneP;
    }

    public void setOneP(Integer oneP) {

        this.oneP = oneP;
    }

    public Integer getTwoP() {

        return twoP;
    }

    public void setTwoP(Integer twoP) {

        this.twoP = twoP;
    }
}

7.补充:

     自定义标签类得继承tagsupport或者simpletagsupport,以下以前者为例。

需要重写他的方法,doStartTag(),一般主要只写这个,表示在读到标签开始执行,返回值为SKIP_BODY
执行的时候,需要页面等待。然后doEndTag为读到结束标签后执行,返回EVAL_PAGE告诉画面继续执行剩余的画面,我这边举例暂时没写后者。

   

转载于:https://my.oschina.net/huaizhe/blog/1625546

你可能感兴趣的文章
Section Formula
查看>>
预处理指令
查看>>
笔记本CPU的型号和类型的区分方法
查看>>
fzu2020( c(n,m)%p,其中n, m, p (1 <= m <= n <= 10^9, m <= 10^4, m < p < 10^9, p是素数) )
查看>>
发送邮件(E-mail)方法整理合集
查看>>
(转)sqlite developer注册方法
查看>>
最大值 最小值 最初值 最末值
查看>>
Anagrams
查看>>
iphone手机分辨率--持久维护
查看>>
DRP——Servlet(一)
查看>>
pydoc介绍
查看>>
使用rsyslog+loganalzey收集日志显示客户端ip
查看>>
EF实现主从表自动生成主键保存
查看>>
Atitit.程序包装exe启动器 打包 发布 设计 -生成exe java
查看>>
Mac下MySQL卸载方法 转载
查看>>
Chrome for Android在Chromium代码库中的提交patch
查看>>
iphone 拨打电话的 两种方法-备
查看>>
python小程序:备份文件
查看>>
为什么HikariCP被号称为性能最好的Java数据库连接池,怎样配置使用
查看>>
高德地图API INVALID_USER_SCODE问题以及keystore问题
查看>>