jsp自定义标签

以前都是直接使用项目中已经开发过的项目,但是由于新的需求,需要自己动手开发标签。这当中就遇到了一个问题,无法获得页面上下文,导致获得页面输出流时一直报空指针,在网上提问以后也没有帮忙解决,后来就觉得这应该是一个小问题,其实也确实就是一个小问题。现贴出源错误代码的部分

 

public class BaseTag extends SimpleTagSupport {
     public JspWriter out=getJspContext().getOut();//获得输出流
 }

其实这样写就会出错,会导致我说的空指针错误,其实就是因为父类TagSupport中在完成调用构造方法后才会给pageContext赋值,所以这种写法不正确。同样的原因将out=getJspContext().getOut();放在构造方法中也会出错。

下面是关于TagSupport的一点简单介绍。

一、TagSupport类简介

1、处理标签的类必须扩展javax.servlet.jsp.TagSupport。

2、TagSupport类的主要属性:

A.parent属性:代表嵌套了当前标签的上层标签的处理类;

B.pageContex属性:代表Web应用中的javax.servlet.jsp.PageContext对象;

3、JSP容器在调用doStartTag或者doEndTag方法前,会先调用setPageContext和setParent方法,设置pageContext和parent。因此在标签处理类中可以直接访问pageContext变量;

4、在TagSupport的构造方法中不能访问pageContext成员变量,因为此时JSP容器还没有调用setPageContext方法对pageContext进行初始化。

#p#

二、TagSupport处理标签的方法

1、TagSupport类提供了两个处理标签的方法:

public int doStartTag() throws JspException 
public int doEndTag() throws JspException

2、doStartTag:但JSP容器遇到自定义标签的起始标志,就会调用doStartTag()方法。

doStartTag()方法返回一个整数值,用来决定程序的后续流程。

A.Tag.SKIP_BODY:表示?>…之间的内容被忽略;

B.Tag.EVAL_BODY_INCLUDE:表示标签之间的内容被正常执行。

3、doEndTag:但JSP容器遇到自定义标签的结束标志,就会调用doEndTag()方法。doEndTag()方法也返回一个整数值,用来决定程序后续流程。

A.Tag.SKIP_PAGE:表示立刻停止执行网页,网页上未处理的静态内容和JSP程序均被忽略任何已有的输出内容立刻返回到客户的浏览器上。

B.Tag_EVAL_PAGE:表示按照正常的流程继续执行JSP网页。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。