自定义标签 一 对传统标签接口的使用

1.用自定义标签如何控制jsp页面某一部分内容是否执行:
编写一个java类,实现tag接口,通常是继承tag的实现类,TagSupport,控制doStartTag

方法的返回值,如果返回EVLAL_BODY_INCLUDE,则标签体会执行,如果返回SKIP_BODY,则

标签体不会执行
public class TagDemo1 extends TagSupport {
@Override
public int doStartTag() throws JspException {
return Tag.EVAL_BODY_INCLUDE;
}
}
说明:该标签套在什么内容上,什么内容就执行。如果返回值换成SKIP_BODY,那么套在什

么内容上,什么内容就不执行。


2.用自定义标签如何控制jsp页面是否执行
编写一个java类,实现tag接口,通常也是继承tag的实现类,TagSupport,控制doEndTag

方法的返回值,如果返回EVLAL_PAGE,则标签余下的jsp会执行,如果返回SKIP_PAGE,则

余下jsp不会执行
public class TagDemo2 extends TagSupport {
@Override
public int doEndTag() throws JspException {
return Tag.EVAL_PAGE;
}
}


3.用自定义标签如何控制标签重复执行
编写一个java类,实现IterationTag接口,通常也是继承tag的实现类,TagSupport,首先

控制doStartTag方法的返回值,让它返回EVAL_BODY_INCLUDE,让标签体执行,然后控制

doAfterBody方法,如果该方法返回EVAL_BODY_AGAIN,则标签就会重复执行,如果返回

SKIP_BODY,则标签体不会再执行。
public class TagDemo3 extends TagSupport {

int count = 0;//注意:这个变量必须写在方法体的外面,否则将形成死循环
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return Tag.EVAL_BODY_INCLUDE;
}

@Override
public int doAfterBody() throws JspException {
count++;
if(count<5){
return IterationTag.EVAL_BODY_AGAIN;
}else{
return Tag.SKIP_BODY;
}
}
}

4.用自定义标签如何修改标签体
编写一个java类,实现BodyTag接口,通常是使用他的实现类,BodyTagSupport,首先控制

doStartTag方法的返回值,让它返回EVAL_BODY_BUFFERED,则服务器会创建一个

BODYContent对象封装标签体,并调用setBodyContent方法,把代表标签体的BODYCOntent

对象传递给标签处理器类,开发人员在doendtag方法中,拿到BODYCOntent对象就拿到标签

体,从而可以对标签体作出修改后再输出。
public class TagDemo4 extends BodyTagSupport {
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
BodyContent bc = this.bodyContent;
String content = bc.getString(); //得到标签体
content = content.toUpperCase();
try {
this.pageContext.getOut().write(content);
} catch (IOException e) {
throw new RuntimeException(e);
}
return Tag.EVAL_PAGE;
}
}

注意:虽然传统tag接口已经被simpleTag接口取代,但是在一些框架源代码中还是经常会遇到,作为程序员,有必要清楚,传统标签的使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值