3.自定义标签功能扩展

来源:互联网 发布:淘宝q币代理qq号 编辑:程序博客网 时间:2024/05/09 09:49

1.控制jsp页面某一部分内容是否执行

原理:控制doStartTag方法的返回值,如果返回值是Tag.EVAL_BODY_INCLUDE,则标签体执行;如果返回的是Tag.SKIP_BODY,那么标签体不会执行。

 

注意一点:在tld文件的tag标签的body-content选项的取值是:

tld文件中的四种标签体类型

EMPTY、  JSP、  scriptless 、tagdepentend

 

 

2.用标签控制整个页面是否执行

(1)在页面的最上面加一个标签(不要有标签体,比如<itcast:demo2 />)

(2)在标签处理器类里面控制doEndTag方法的返回值,如果返回EVLAL_PAGE,则标签余下的jsp会执行,如果返回SKIP_PAGE,则余下jsp不会执行

 

3.控制jsp页面重复执行

编写一个java类,实现IterationTag接口,首先控制doStartTag方法的返回值,让它返回EVAL_BODY_INCLUDE,让标签体执行,然后控制doAfterBody方法,如果该方法返回EVAL_BODY_AGAIN,则标签就会重复执行,如果返回SKIP_BODY,则标签体不会再执行。

比如:我想要标签里面的内容重复输出5遍

<itcast:demo3>aaa</itcast:demo3>

这时如果用tag接口,是实现不了重复输出的,因为tag接口只能控制是否输出,不能控制重复输出。

 

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接口,首先控制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;
 }
 
 

 
 
}

 

 

 

 

原创粉丝点击