第二十五天(简单标签)

来源:互联网 发布:c语言入门自学书籍推荐 编辑:程序博客网 时间:2024/06/04 18:39

自定义标签

1.创建一个标签处理器类:实现SimpleTag接口(或者直接继承SimpleTagSupport)

2.再WEB=INF文件夹下新建一个 .tld(标签库描述文件) 为扩展名的 xml 文件,并考入固定的部分,并对description,display-name,tlib-version,short-name,uri 修改

3.在tld文件中描述自定义的标签

<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    version="2.0">      <description>MyTag 1.0 core library</description>  <display-name>MyTag core</display-name>  <tlib-version>1.0</tlib-version>  <short-name>baidu</short-name>  <uri>http://www.baidu.com/mytag/core</uri>    <tag>  <name>hello</name>  <tag-class>com.ohh.suc.HelloSimpleTag</tag-class>  <body-content>empty</body-content>  </tag>  </taglib>

4.在JSP页面上使用自定义标签

①使用taglib指定导入标签库描述文件:<%@taglib uri="http://www.baidu.com/mytag/core" prefix="baidu" %>

②使用自定义的标签:<baidu:hello/>



setJspContext:一定会被 JSP 引擎所调用,先于 doTag,把代表 JSP 引擎的pageContext传给标签处理器类:

private PageContext pageContext;public void setJspContext(JspContext arg0) {this.pageContext = (PageContext) arg0;}



带属性的自定义标签

1.先在标签处理器类中定义 setter 方法 建议把所有的属性都设为String类型

private String value;private String count;public void setValue(String value) {this.value = value;}public void setCount(String count) {this.count = count;}


2.在tld描述文件中来描述属性:

  <attribute>  <!-- 属性名 -->  <name>value</name>  <!-- 该属性是否是必须的 -->  <required>true</required>  <!-- 该属性是否可以接收运行时表达式的动态值 -->  <rtexprvalue>true</rtexprvalue>  </attribute>

3.在页面中使用属性,属性名同tld文件中定义的名字



通常情况下开发简单标签直接继承SimpleTagSupport就可以了,可以直接调用其对应的 getter 方法得到对应的API



带标签体的自定义标签

1.若一个标签有标签体

    在自定义标签的标签处理器中使用JspFragment对象封装标签体信息

2.若配置了标签含有标签体,则JSP引擎会调用setJspBody()方法把JspFragment传递给标签处理器类

    在SimpleTagSupport中还定义了一个getJspBody()方法,用于返回JspFragment对象

3.JspFragment的invoke(Writer)方法:把标签体内容从Writer中输出,若为null则等同于invoke(getJspContext.getOut()),即直接把标签体内容输出到页面上

    有时,可以借助于StringWriter,可以在标签处理器类中先得到标签体的内容:

JspFragment bodyContent = getJspBody();StringWriter sw = new StringWriter();bodyContent.invoke(sw);

4.在tld文件中,使用 body-content 节点来描述标签体的类型,大部分情况下取值为scriptless

    empty:没有标签体

    scriptless*:标签体可以包含el表达式和JSP动作元素,但不能包含JSP脚本元素 不能写<%= ...%>

    tagdependent:表示标签体交由标签本身去解析处理,若指定tegdependent,在标签体中的所有代码都会原封不动的交给标签处理器,EL表达式不会执行



开发有父标签的标签

1.父标签无法获取子标签的引用,父标签仅把子标签作为标签体来使用

2.子标签可以通过getParent()方法来获取父标签的引用(需继承SimpleTagSupport或自实现SimpleTag接口的该方法)

若子标签的确有父标签,JSP引擎会吧代表父标签的引用通过setParent(JspTag parent)赋给标签处理器

3.注意 父标签的类型是JspTag类,该接口是一个空接口,是来统一SimpleTag和Tag的,实际使用需要进行类型的强制转换

4.在tld配置文件中,无需为父标签有额外的配置,但子标签是以标签体的形式存在的,所以父标签的<body-content>需设置为scriptless


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鼻炎的人感冒了怎么办 小孩上幼儿园反复感冒怎么办 3岁宝宝感冒鼻炎怎么办 鼻炎犯了鼻子不通气怎么办 食物呛到鼻子里怎么办 胃疼引起的焦虑怎么办 泰迪犬发生口腔亏痒怎么办? 俩鼻子都堵了怎么办 2岁宝宝鼻甲肿大怎么办 感冒10多天不好怎么办 宝妈鼻炎犯了怎么办 鼻炎犯了好多黄鼻涕怎么办 空调吹多了上火怎么办 宝宝感冒鼻塞流鼻涕口臭怎么办 怀孕了有鼻息肉怎么办 孕晚期鼻炎犯了怎么办 孕妇鼻炎犯了头疼怎么办 一岁宝宝有鼻炎怎么办 蒸馒头的面酸了怎么办 dnf点券充错账号了怎么办 英雄联盟点券充错区了怎么办 文玩鼻烟壶盖子松了怎么办 文胸磨腋下的肉怎么办 荷兰在窝里拉屎怎么办 宝宝把泡沫吃了怎么办 荷兰猪一直叫该怎么办 人吃了缓冲泡沫怎么办 不小心吃了泡沫怎么办 不想养荷兰猪了怎么办 刚买的乌龟死了怎么办 剪猫指甲出血了怎么办 猫吃了酸性植物怎么办 金鱼在缸底不动怎么办 野兔子不吃不喝怎么办 让荷兰猪咬了怎么办 仓鼠的脚被棉花怎么办 仓鼠的脚变黑了怎么办 夏天小仓鼠生了怎么办 把仓鼠摔出血了怎么办 仓鼠摔成骨折了怎么办 孩子被仓鼠咬了怎么办