本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/dom.html
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
文档对象模型
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种连续的(或缓存)方法。
一个新的MarkupWriter接口允许大多数代码把生成的输出作为一个流。事实上, MarkupWriter更象一个DOM树中的指针。
一旦所有的呈现完成,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()调用,这被用来移动当前节点到上一层。
- writer.element("img", "src", "icon.png", "width", 20, "height", 20, alt, "*");
- writer.end();
注意end()必需被在这调用,即使< img >元素是空的(没有body)。如果忽略调用end(),那么稍后被调用的element()创建的元素将被潜逃在< img >元素内,这不是我们期望的。
此外,每个element()调用都必须匹配一个end()调用。
- writer.element("select", "name", "choice");
-
- for (String name : optionsNames)
- {
- writer.element("option");
- writer.write(name);
- writer.end();
- }
-
- writer.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支持这个注释分隔符。
- writer.comment("Start of JS Menu code");
分享到:
- 2007-05-19 09:46
- 浏览 1663
- 评论(0)
- 论坛回复 / 浏览 (0 / 2582)
- 查看更多
相关推荐
<tapestry:propertySelection name="country" label="Country" model="${countries}" /> ``` **14. Table组件:** - **用途:**用于创建表格。 - **示例代码:** ```xml <tapestry:table data-model="${users}...
- **示例**: `<tapestry:table model="${model}" columns="name,price">` **5.2 列表交互背景颜色** - **实现**: 通过CSS选择器来改变交互时的背景色。 - **示例**: `tr:hover { background-color: #f0f0f0; }` **...
Tapestry是Apache软件基金会的一个开源项目,它提供了一种基于Java的声明式MVC(Model-View-Controller)框架,用于构建高度模块化和可维护的Web应用。 Tapestry 5.0的核心理念在于通过组件化来提升开发效率和代码...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
1. **Tapestry Core**: 这是Tapestry框架的基础部分,包含了核心组件、服务容器(Tapestry IoC)和页面生命周期管理。通过源码分析,我们可以理解其如何实现页面组件的渲染、事件处理和依赖注入。 2. **Tapestry ...
2. **Tapestry Core**:`tapestry-core-5.3.8.jar`是Tapestry框架的核心库,包含了框架的基础组件、服务和API。它提供了页面、组件、事件处理、URL映射等功能,是构建Tapestry应用的基础。 3. **Plastic**:`...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...
挂毯React 将React( )与Tapestry( )一起使用。 该库提供了将Tapestry与JSX模板结合... define ( [ 't5/core/dom' , 'react' , 'react-dom' ] , function ( dom , React , ReactDOM ) { var HelloMessage = React
《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...
资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...
这个压缩包包含了多个以"Tapestry"开头的子文件,如 "tapestry-core", "tapestry-hibernate", "tapestry-ioc", "tapestry-upload", 和 "tapestry-spring",这些都是Tapestry框架的不同模块或插件。这些文件的后缀是...
与传统的MVC(Model-View-Controller)框架相比,Tapestry更加关注于组件的封装和复用,使得开发者能够更专注于业务逻辑而非底层细节。 #### Spring框架:实现业务逻辑与展示层的分离 Spring框架是一个轻量级的...
### Tapestry5:构建Web应用程序 #### 一、Tapestry5概述 Tapestry5是一种先进的、基于Java的Web开发框架,它以其强大的功能、灵活性以及易用性著称。该框架由Howard Lewis Ship创建,并由Apache软件基金会维护。...
Tapestry是一个分布式系统基础设施,专门设计用于实现容错性的广域定位和路由。这个系统由Ben Y. Zhao、John Kubiatowicz和Anthony D. Joseph等人在加州大学伯克利分校的计算机科学部开发,旨在应对无处不在计算的...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型来构建动态、数据驱动的Web应用。本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用...
《深入理解 Tapestry 4.1.5:项目实例与核心库解析》 Tapestry 是一个基于 Java 的开源Web 应用程序框架,它强调组件化开发,提供了一种强大的方式来构建动态、高性能的Web 应用。在"tapestry-project-4.1.5"这个...
基于库 特征: 无需编写一行 Javascript 即可创建推送应用程序 完全可配置 使用设置传入消息的... xmlns : p = " tapestry:parameter " > <!-- type a chat message in this form --> < form t :
- **tapestry-core**:Tapestry的核心库,包含了框架的主要功能和API。 - **tapestry-test**:测试支持模块,提供了针对Tapestry应用的单元测试和集成测试工具。 - **tapestry-spring**:Tapestry与Spring框架的...
**Tapestry 3 开发指南** Tapestry 3 是一个开源的Java Web应用程序框架,它在20世纪90年代末至21世纪初非常流行,由Apache软件基金会维护。这个框架提供了组件化、事件驱动和声明式编程模型,帮助开发者构建动态、...