码迷,mamicode.com
首页 > Web开发 > 详细

jsp自定义标签

时间:2015-05-16 00:17:38      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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网页。

jsp自定义标签

标签:

原文地址:http://my.oschina.net/hnqingping1255/blog/415571

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!