您的位置:首页 > 移动开发 > Objective-C

开发定制标签库-6

2006-04-25 21:20 141 查看
继承TagSupport和BodyTagSupport类
前面我们依次介绍了Tag,IterationTag,BodyTag接口。实际应用当中,我们并不需要直接实现他们。jsp规范中已经为我们提供了两个类TagSupport和BodyTagSupport,用以对IterationTag和BodyTag的缺省实现。
所以,我们只需要根据需要去继承这两个类,然后重写我们需要定制的方法就可以了。

TagSupport类
该类是IterationTag的缺省实现。除了实现原有方法外,本身还增加了一些有用的其他方法和成员变量。下表列出其中重要的几个:

名称 描述 
重写的方法和他们的返回值  
void doStartTag() 继承自Tag。返回值SKIP_BODY。 
void doAfterBody() 继承自IterationTag。返回值SKIP_BODY。 
void doEndTag() 继承自Tag。返回值EVAL_PAGE。 
处理嵌套标签的有用的方法  
void setParent(Tag) 接受和维护一个父标签的引用。 
Tag getParent()返回父标签的引用。 
Tag findAncestorWithClass(Tag,Class) 静态方法。寻找最近的指定类的标签。 
标签属性操作  
void setValue(String,Object) 设置属性。属性名是字符串,值可以是任何对象。 
Object getValue(String) 返回给定属性名的属性的值。 
Enumeration getValues() 返回一个所有值的枚举。 
void removeValue(String) 删除给定的属性。 
受保护的实例变量  
PageContext pageContext 一个保存着PageContext对象的变量。 
 
BodyTagSupport类
该类同时继承了TagSupport类,并实现BodyTag接口。除了前表所示方法,该类还提供了一些其它方法便于使用。

名称 描述 
重写的方法和他们的返回值  
void doStartTag() 继承自Tag。返回值EVAL_BODY_BUFFERED。 
void doAfterBody() 继承自IterationTag。返回值SKIP_BODY。 
void doEndTag() 继承自Tag。返回值EVAL_PAGE。 
用以处理缓冲的方法  
void setBodyContent(BodyContent) 接受和维护一个BodyContent对象(缓冲对象)的引用。 
BodyContent getBodyContent() 返回BodyContent对象的引用。 
JspWriter getPreviousOut() 返回JspWriter对象,BodyContent就是对他的简单包裹。 
      
定制标签和JavaBeans之间的简单区分
虽然两者都是为了提高组件可重用性而设计的。但是一个经常被问起的问题是:如何决定在何时使用其中的一种技术,而不是另一种。
这里有个简单的比较,来帮助你如何决策。
.JavaBeans是jsp页的数据处理器并增加数据管理的逻辑。主要用以存储。定制标签,倾向于对特定请求的处理。
.标签是线程安全的,而bean则不是。Bean的线程安全是由开发人员手工实现的。
.标签了解他所运行的外部环境(pageContext),而bean则不。
.标签属于转换单位的一部分,而bean独立于转换单位之外。
.标签可以访问隐含对象,bean则不能。(这是对上两条的细节描述)
.标签只有页范围(page scope)。他们在一个请求内和一个页面内被创建。虽然他们可以访问所有的范围。beans则可以被创建于各种不同的范围。标签可以创建和维护bean,反之不然。
.标签的API是围绕jsp页的概念开发的,所以标签只能用在jsp页中。而bean却可以被更广泛的组件使用。
.标签不是持久化对象。而bean可以被持久化(序列化),以被后续使用。
相比之下标签较靠近用户,且只能用于jsp页面;而bean较靠近商业逻辑,更适合处理数据处理和维护类工作,且可以被任何组件重用。因此,首选的使用方法是用户的请求由标签负责处理,而需要应用商业逻辑和数据处理的时候,由标签再调用bean来处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息