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