浏览 2585 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-19
本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/dom.html
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
![]() 文档对象模型
Tapestry5与Tapestry4或其他框架比采取了一个非常不同的方法来标记生成。
l Tapestry4方法
在Tapestry4里,标记生成是基于产生一个字符流。在最低级别里,事实上输出在标记格式里,比如HTML,XHTML或WML是未知的。较高级别,像IMarkupWriter 接口(及其实现)提供标记生成概念:元素,属性,开始标签和结束标签。
通常,组件将一起工作产生标记。一个通用的例子是一个Form组件和很多它包含的表单控制组件(像TextField,Checkbox等)。这个Form组件不能完全呈现直到所有附加的组件首先呈现。
ImarkupWriter支持嵌套writers。嵌套的writers是一种缓冲输出方法直到需要。一个Form组件将使用一个嵌套writer呈现他的body,然后写出他的< form >和< input type=”hidden” >元素,同样嵌套,缓存body
当两个元素同等(不是父/子关系)时这种方法将崩溃。例如,呈现一个FieldLabel组件将被他的同伴组件TextField影响。在Tapestry4种处理这些情况需要许多补充和特殊方案。
lTapestry5方法
Tapestry5组件呈现出一个DOM,一个文档对象模型(Document Object Model)。这个文档内的树型节点表示为元素,属性和文本。
DOM可以完全运行在一个随机访问方式上。这要优于Tapestry4种连续的(或缓存)方法。
一旦所有的呈现完成,DOM树被作为流交给客户端。计划增加控制输出个是,包括pretty-printing 和/或输出压缩(去处所有多余的空格)。
DOM 类
尽管事实上一些第三方的替代选择存在,但实现DOM是 Tapestry 的一部份。这是一个希望限制依赖关系的框架, 而且Tapestry DOM 为初始化建立和少量并发的问题进行了改进。大多数DOM实现都较为成熟,对查询(通常是使用xpath)和操纵具有更大的支持.
一旦文档对象被创建,你不能直接创建新的文档对象;反之,每个文档对象包括方法创建新的子对象。这主要应用于Element类,它可以是一个文本,注释和其他元素的容器。
文档对象表现为一个完整的文档,也就是说,一个完整响应被发送给客户端。
文档将有一个唯一的root元素。newRootElement()方法被用来为文档创建root元素。
少许文档元素可以有属性,并且他们可以包含其它的元素,像text和comments。
addAttribute()方法添加一对新的属性/值元素。如果现有的属性指定的名称已经存在,那么新值会被忽略。这意味着当不同代码块尝试加入一个属性元素... 首先放入的属性将"赢"
DOM被建造之后的一些基本操作尚未实现。计划增加一些方法重新培育DOM节点到新的元素内。另外,一些查询方法可以被加入。
MarkupWriter接口允许文档结构在维持一个流的时候被建造。
l element() and end()
调用element()创建一个新的元素在树内。并且提供属性给新的元素。调用write(), writeln() 和 writef()在当前元素内书写文本节点。每个对于element()的调用都匹配一个end()调用,这被用来移动当前节点到上一层。
注意end()必需被在这调用,即使< img >元素是空的(没有body)。如果忽略调用end(),那么稍后被调用的element()创建的元素将被潜逃在< img >元素内,这不是我们期望的。
此外,每个element()调用都必须匹配一个end()调用。
l attributes()
添加额外的名/值对在当前元素。
当值是空的时,没有属性被添加。
当一个新的名称和现有的名称冲突时,新的值被忽略。这使前面的值指定一个属性优于任何后继值.
l write()
Write()方法书写文本在当前元素内。它自动提供文本为XML控制字符('<', '>', 和'&')并且转换它们为它们在XML实体内的同等物('<', '>', 和 '&')。结果是正确,安全的HTML/XML输出,即使内容(它可能是来自一个样板,或从外部源如数据库)包括这些有问题字符。
lwritef()
writef() 方法格式化大量的argument。.它利用java.util.Formatter. 这是一个方便的格式化,最终调用write().
l writeRaw()
writeRaw()方法书写未过滤的文本到DOM内。当DOM被呈现给标记时,将提供的字符串不作任何改变写入到输出流。应小心,因为这很容易造成无效标记,甚至标记不能很好的被格式化。
l comment()
添加一个XML注释。Tapestry支持这个注释分隔符。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |