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