知识大全 自定义taglib的开发[2]

Posted

篇首语:业无高卑志当坚,男儿有求安得闲?本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 自定义taglib的开发[2]相关的知识,希望对你有一定的参考价值。

Struts:自定义taglib的开发[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  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的自定义标记的生命周期如下

   创建标记   调用Setter方法   调用doStartTag()方法   调用setBodyContent()方法   调用InitBody()方法   处理标记的Body   doAfterBody() 根据返回值 如果为EVAL_BODY_AGAIN 继续执行 如果不是 执行    调用doEndTag()方法   判断标记是否需要重用 如果要 执行 否则执行release()方法

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

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

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

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

    <validator><validator class></validator class></validator>

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

  JSP 中的TryCatchFinally接口 这个接口主要是用于当自定义标记出现异常时释放自定义标记中的资源使用的 它定义了两个方法 public void doCatch(Throwable t) (当doStartTag doInitBody doAfterBody doEndTag方法出现异常时会调用这个方法)

  piblic void doFinally() (当doEndTag被调用后 无论是否出现异常都会调用这个方法 就像程序中的finally块 可以用来释放资源)

  在JSP 中 可以通过在tld文件中加入一个元素<uri></uri>来指定自己的在taglib指令中使用的名称 然后把这个tld文件与Manifest mf一起放在META INF目录中 那么在页面中就可以非常方便地导入这些tld

  编写自定义标记的原则

   使用脚本变量(允许设计者为脚本变量起名 将脚本变量的数量减到最小 使用一个组合脚本对象和存取函数即使用JavaBean)

   当设计相互协作的标记时应该尽量避免创建一套新的语言 应当尽量使用脚本变量 编写代码而不是内容 不要在自定义标记中产生HTML 这样会失去通用性

cha138/Article/program/Java/ky/201311/29146

相关参考

知识大全 自定义taglib的开发[1]

Struts:自定义taglib的开发[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  自定

知识大全 Delphi自定义部件开发(一)[2]

DELPHI基础教程:Delphi自定义部件开发(一)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(二)[2]

DELPHI基础教程:Delphi自定义部件开发(二)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(三)[2]

DELPHI基础教程:Delphi自定义部件开发(三)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(四)[2]

DELPHI基础教程:Delphi自定义部件开发(四)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 JSP自定义标签开发流程[2]

JSP自定义标签开发流程[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  下表引自Sun的j

知识大全 开发Eclipse下的自定义控件[2]

开发Eclipse下的自定义控件[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!addPain

知识大全 Asp.net 2.0 自定义控件开发

Asp.net2.0自定义控件开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (一)概述  

知识大全 JSP自定义标签开发入门

JSP自定义标签开发入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一般情况下开发jsp自定

知识大全 Delphi自定义部件开发(一)[3]

DELPHI基础教程:Delphi自定义部件开发(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看