taglib 原理和实现

上传人:工**** 文档编号:564903623 上传时间:2023-04-17 格式:DOCX 页数:22 大小:31.86KB
返回 下载 相关 举报
taglib 原理和实现_第1页
第1页 / 共22页
taglib 原理和实现_第2页
第2页 / 共22页
taglib 原理和实现_第3页
第3页 / 共22页
taglib 原理和实现_第4页
第4页 / 共22页
taglib 原理和实现_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《taglib 原理和实现》由会员分享,可在线阅读,更多相关《taglib 原理和实现(22页珍藏版)》请在金锄头文库上搜索。

1、第一章:taglib原理和实现。问题:Tag究竟是什么?如何实现一个Tag?一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类是由jsp容器提供的,无须开发人员自己实现。换句话说,你只需把实现了业务逻辑的类继承TagSupport或者BodyTagSupport,再做一些特别的工作,你的类就是一个Tag。并且它自己负责和jsp页面的交互,不用你多操心。“特别的工作”通常有以下几个步骤:1)提供属性的set方法,此后这个属性就可以在jsp页面

2、设置。以jstl标签为例,这个value就是jsp数据到tag之间的入口。所以tag里面必须有一个setValue方法,具体的属性可以不叫value。例如setValue(Stringdata)this.data=data;这个“value”的名称是在tld里定义的。取什么名字都可以,只需tag里提供相应的set方法即可。2)处理doStartTag或doEndTag。这两个方法是TagSupport提供的。还是以vc:outvalue=/为例,当jsp解析这个标签的时候,在“”时触发doEndTag事件。通常在doStartTag里进行逻辑操作,在doEndTag里控制输出。3)编写tld文

3、件。4)在jsp页面导入tld这样,你的jsp页面就可以使用自己的tag了。通常你会发现自己绝大多数活动都集中在doStartTag或doEndTag方法里。确实如此,熟悉一些接口和类之后,写taglib很容易。正如jsp设计的作者所言:里面的逻辑稍微有点复杂,但毕竟没有火箭上天那么难。2。一个简单的例子:OutputTagpackagediegoyun;importjavax.servlet.jsp.JspException;importjavax.servlet.jsp.JspWriter;importjavax.servlet.jsp.tagext.TagSupport;/*author

4、chenys*/publicclassOutputTagextendsTagSupportprivateStringname=null;publicvoidsetName(Stringname)this.name=name;publicintdoStartTag()throwsJspExceptiontryJspWriterout=pageContext.getOut();out.print(Hello!+name);catch(Exceptione)thrownewJspException(e);returnEVAL_PAGE;简要说明:1。如何输出到jsp页面:调用JspWriterJsp

5、Writerout=pageContext.getOut();out.print记住这个方法就可以了。2。输出后如何作处理函数会返回几个值之一。EVAL_PAGE表示tag已处理完毕,返回jsp页面。还有几个值,例如EVAL_BODY_AGAIN和EVAL_BODY_INCLUDE等,后面我们会作讨论编写tldv!DOCTYPEtaglibPUBLIC-/SunMicrosystems,Inc./DTDJSPTagLibrary1.2/ENhttp:/ 先看这么一个例子TheStringinrequestis:2.如何支持el表达式在路径org.apache.taglibs.standard.

6、lang.support下,有个叫ExpressionEvaluatorManager.evaluate的方法,当el表达式作为入参时,调用这个方法,在tag内即可自动把el表达式转化。例如,你想tag的value字段支持el表达式,那么只需在set方法里如下调用:publicvoidsetValue(Objectvalue)throwsJspExceptionthis.value=ExpressionEvaluatorManager.evaluate(value,value.toString(),Object.class,this,pageContext);ExpressionEvaluat

7、orManager.evaluate有四个参数。第一个表示tag的名字,在取el表达式出错时使用。一般和属性名字相同。第二个要求字符串,通常简单调用输入对象的toString方法。第三个是类,通常用Object.class。第四个用this即可,第五个是pageContext变量。通常不用对这个方法思考太多。只需改改属性名字,其他照搬即可。注意:当你的tag属性支持el表达式时,你必须把它声明为Object对象。如上述的value,应该声明为:privateObjectvalue=null;3.实例:让OutputTag支持El表达式packagediegoyun;importjavax.se

8、rvlet.jsp.JspException;importjavax.servlet.jsp.JspWriter;importjavax.servlet.jsp.tagext.TagSupport;importorg.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;publicclassNewOutputTagextendsTagSupportprivateObjectname=null;publicvoidsetName(Objectname)throwsJspExceptionthis.name=Express

9、ionEvaluatorManager.evaluate(name,name.toString(),Object.class,this,pageContext);publicintdoStartTag()throwsJspExceptiontryJspWriterout=pageContext.getOut();out.print(Hello!+name);catch(Exceptione)thrownewJspException(e);returnEVAL_PAGE;在diego.tld里添加声明vtagvnamenewoutv/namevtag-classdiegoyun.NewOutputTagv/tag-classvbody-contentemptyv/body-contentnamefalsetruev/attribute编写jsp测试TestElsupportedtag:可以看到页面输出为:TestElsupportedtag:Hello

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号