快速业务通道

Struts:自定义taglib的开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
();

Tag接口中的返回常数意义:

EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流

SKIP_BODY:告诉服务器不要处理正文内容

EVAL_PAGE:让服务器继续执行页面

SKIP_PAGE:让服务器不要处理剩余的页面

EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回

EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回

EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。

在调用doStartTag()方法之前其实标记还调用了其他两个方法:setPageContext()和setParent();所以在后面的方法中可以使用pageContext和parent对象,如果需要的话。

让自定义标签在页面中创建对象时必须使用一个标准的JSP对象TagExtraInfo类,它可以创建脚本变量还可以在编译的时候对标签进行检验,TEI类仅可以生成由setAttribute方法存储在PageContext对象中的变量,而并不是单独生成变量。

通过TEI类定义脚本变量可以让使用者自己定义在页面中使用对象的名称。

除了使用TEI类方法之外,还可以简单的在TLD中定义一个<variable>对象来使用自定义对象,用法如下:

<variable> <name-from-attribute>name</name-from-attribute> <variable-class>String []</variable-class> <declare>true</declare> <scope>AT_END</scope> </variable>

对于variable的子元素,<name-from-attribute>指的是创建的变量名称从属性name中来取得,当然也可以通过<name-given>元素来限制变量的名称。注意这两个元素是互斥的。

一个扩展BodyTagSupport的自定义标记的生命周期如下:

1.创建标记

2.调用Setter方法

3.调用doStartTag()方法

4.调用setBodyContent()方法

5.调用InitBody()方法

6.处理标记的Body

7.doAfterBody();根据返回值,如果为EVAL_BODY_AGAIN,继续执行6,如果不是,执行8

8.调用doEndTag()方法

9.判断标记是否需要重用,如果要,执行4;否则执行release()方法。

Struts:自定义taglib的开发(3)

时间:2010-12-21

TagSupport类的方法findAncestorWithClass()方法可以用来查找指定的父类,它有两个参数一个为本身的类名,还有一个就是要查找的父类的名称,如果没有返回null;例如ParentTag parent = (ParentTag) this.findAncestorWithClass(this,ParentTag.class);

自定义标记的验证方法:JSP1.1 TEI类可以在编译时刻检验自己的标记,这个类中有一个isValid()方法,如果TLD中为这个标记定义了这个TEI类,那么网页在编译的时候将会调用这个方法,并且会传入一个包含属性具体内容的参数TagData.(在JSP1.2中同样有效)

JSP1.2 JSP1.2中引入一个新的标记检验方法,定义了一个新类TagLibraryValidator,并且可以由此派生出检验标志的类,大多数情况下仅使用这个类的validate()方法,它有三个参数:prefix(在taglib指令中定义的前缀);uri(TLD文件中的URI);page(JSP页的PageData XML版本),validate()方法返回值为null时表示验证成功,否则返回的String类型将是一个错误信息。

当validator在TLD文件中定义时,它应该放在<tag>元素定义的外面,因为它是用来处理验证标记库中的所有标记的。

<validator><validator-class></validator-class></validator>.

比较JSP1.2和JSP1.1中的方法:TagLibraryValidator比TEI类更全面,可以用来检测整个网页,而不仅仅是标记本身,可以用来处理标记间的合作,并且这种方法可以用来通知程序员错误出在哪里,但是同时它的方法也比TEI类的方法复杂多了,因为它需要遍历整个XML版本

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号