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


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接口取代,但是在一些框架源代码中还是经常会遇到,作为程序员,有必要清楚,传统标签的使用。

你可能感兴趣的:(jsp,框架)