带标签体的标签和父标签的标签

  1. 带有标签体的自定义标签

 1)若有一个标签体:

  <c1:date >sssss</c1:date>

 

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

 

  1. 若配置了标签含有标签体,则jsp会调用setJspBody()方法把JspFragment传递给标签处理类。在SimpleTagSupport中还定义了一个getJspBody()方法用于返回JspFragment对象。

 

 

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

public void doTag() throws JspException, IOException {

// TODO Auto-generated method stub

super.doTag();

JspFragment bFragment = getJspBody();

// JspFragment.invoke(Writer): Writer即为标签体内容的输出的字符流,若为null则为

// 输出到getJspContext.getOut(),即输出到页面上去

bFragment.invoke(null);

}

 

  1. 在tld文件中,使用<body-content>指定标签体的类型:

 大部分情况下取值为tagdependent:

  >empty:没有标签体

  >scriptless:不能有jsp脚本元素,但是可以有el表达式和JSp动作元素

  >tagdependent:表示标签体交由标签体本身去解析处理,若指定为tagdependent,在标签体中的所有代码都会原封不懂的交给标签处理器。而不是将执行结果传给标签处理器

 

 

 

  1. 开发父标签的标签

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

  2)子标签可以通过getParent()方法来获取父标签的引用(需继承SimpleTagSupport或自实现SimpleTag接口中的该方法)若子标签的确有父标签,JSP引擎会把父标签的引用通过setParent(jspTag parent)付给标签处理器

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

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

 

下列是具体的代码

*****************父标签的处理器类**************

public class FatherTag extends SimpleTagSupport {

 

private String name;

 

public void doTag() throws JspException, IOException {

// TODO Auto-generated method stub

super.doTag();

System.out.println("父类标签正在加载" + name);

      //可以通过这个方法来使父标签中的子标签当作一个标签来输出

getJspBody().invoke(null);

}

 

public void setName(String name) {

this.name = name;

}

 

public String getName() {

return name;

}

 

}

 

************************子标签的实现*********************

public class SonTag extends SimpleTagSupport {

 

public void doTag() throws JspException, IOException {

 

super.doTag();

// 1.获取父类标签的对象

JspTag f_Tag = getParent();

 

// 2.获取这个父类标签中的属性

FatherTag fatherTag = (FatherTag) f_Tag;

String name = fatherTag.getName();

 

// 3.把name值打印到JSP页面上

getJspContext().getOut().print("子标签正在加载" + name);

}

 

}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值