- 浏览: 117087 次
- 性别:
- 来自: 哈尔滨
最新评论
-
1054442516:
大哥,小弟刚入门一个月。请tapestry如何集成Mybati ...
(C4)Tapestry IoC:Tapestry IoC Decorators -
walkerstar:
我都是这样做的 public void contribute ...
(2)Tapestry5学习小结:中文验证问题 -
hongyuzhe:
我是真的,那么的那么的希望能多贴出一些,代码说出来。既然能翻译 ...
(A18)Tapestry Core :Configuring Tapestry -
changshuangyi:
问个问题呀,我写的时候为什么private UserAuthe ...
(A6)Tapestry Core:Form Input and Validation -
zhenjw:
怪不得我想看5.0的源代码看不了,原来是没有真正的开放出来呢。 ...
(3)Tapestry5学习小结:显示问题
<o:p></o:p>
本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/templates.html本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
<o:p></o:p>
组件模板
在Tapestry里,组件模板是与页面或者组件类相关的文件,用来包含组件连同他的一些嵌入的组件标记。
从Tapestry4到Tapestry5的一个变化,组件模板形成了良好的XML文档。这意味着每一个开始标记必须对应一个结束标记,每一个属性都必须被引用。
这些模板大多都是是标准的(X)HTML,Tapestry以提供命名空间的方式扩充了普通标记。
我们很快就会了解模板的详细内容。首先是关于关联一个组件到模板的详细介绍。
模板位置
组件模板同组件类一起被存放。文件使用”.html”扩展名,并且和相关的组件类被存放在同一个包里。
以下是一个典型的Maven目录结构,组件类的目录结构是
src/main/java/org/example/myapp/components/MyComponent.java.
相应的模板目录结构是
src/main/resources/org/example/myapp/components/MyComponent.html
同样.,页面类应该是src/main/java/org/example/myapp/pages/MyPage.java
并且相应的模板应该是src/main/resources/org/example/myapp/pages/MyPage.html
模板和编译后的类文件应该被一起打包在WAR应用程序的WEB-INF/classes文件夹内。
对于页面(非组件).,另一个被查找的位置:在web 应用上下文内。这个位置是基于页面的逻辑名,在之前的例子中,模板应该是在web 应用的根文件夹内的MyPage.html。
模板本地化
模板被本地化为一个组件消息目录内的很多相同的单独的文件。有效的本地化被附加在文件名上。比如,德国的用户将看到从MyPage_de.html产生的内容。法国的用户将看到从MyPage_fr.html产生的内容。当没有明确的可用的本地化资源,默认的本地化(MyPage.html)将被使用。
模板继承
如果一个组件没有模板,但是他继承于一个有模板的组件类,那么父类的模板将被应用于子组件上。
这是允许一个组件继承一个基类,但不用必须复制相同的基类模板。
Tapestry 命名空间
组件模板应该包含Tapestry 命名空间,定义在模板的根元素内。
- <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
- <head>
- <title>Hello World Pagetitle>
- head>
- <body>
- <h1>Hello Worldh1>
- body>
- html>
这个定义的命名空间使用了标准的前缀,”t:”.在这个页面的例子全部使用了标准前缀。
Tapestry 元素
Tapestry 元素是使用Tapestry命名空间前缀定义的元素。
所有其他的元素应该使用默认的命名空间,没有前缀。
body
在很多场合,组件被设计成与他的容器模板内的模板整合。
< body >元素被用来标识组件模板中的body在哪里被呈现。
组件可以控制,甚至经常控制,其body是否被呈现。
下面的例子是一个Layout布局组件,页面的具体内容里添加了基本的HTML元素
- <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
- <head>
- <title>My Tapestry Applicationtitle>
- head>
- <body>
- <t:body/>
- body>
- html>
以下是页面如何使用这个组件的:
- <t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
- My Page Specific Content
- t:layout>
当页面呈现时,页面模板和周围的组件模板被整合在了一起。
- <html>
- <head>
- <title>My Tapestry Applicationtitle>
- head>
- <body>
- My Page Specific Content
- body>
- html>
Tapestry4的用户将意识到元素就是RenderBody组件的替代。
block
<block></block>
block 是组件模板部分的一个容器。Block不会正常地呈现;你放到block内的组件或者或内容都不会被正常呈现。然而,通过注入block,你可以精确的控制什么时候和是否呈现内容。
Block可以是匿名的,或者可以有一个id(通过id属性指定)。非匿名的blocks可以注入到组件中。
<parameter></parameter>
parameter
<parameter></parameter>
<parameter></parameter>
< parameter >元素是一个特殊类型的block。他被放置在一个被嵌入的组件的body内。Block通过
<parameter></parameter>
定义传入到组件。
<parameter >包含一个必须的name属性用以识别绑定了组件的哪一个参数。
例如:
- <t:if test="loggedIn">
- Hello, ${userName}!
- <t:parameter name="else">
- Click <a t:type="actionlink" t:id="login">herea> to log in.
- t:parameter>
- t:if>
扩展表达式
另一种呈现的选择输出式使用扩展表达式。扩展表达式是可以潜入在模板体内的特殊字符串,并且借用Ant构建工具的特殊语法。
- Welcome, ${userId}!
这里,${userId}是一个扩展表达式。在这个例子里。组件的userId属性被提取转换成一个字符串,并且放入到输出流里。
扩展表达式只能出现在普通的文本模板中;他们不被允许放在属性或者CDATA部分中。
其实,扩展表达式和参数绑定一样。他的默认绑定前缀是”prop”.(确切地说就是属性名),但是其他绑定的前缀也是有用的。特别是“message”.(用来从组件信息目录中访问本地化信息)
Tapestry 4用户会注意到扩展表达式很简洁,它轻松替代了Insert组件和<span key="...">标识。
组件元素
一个嵌入的组件在模板中被表示为t:命名空间下的元素。例如:
- You have ${cartItems.size()} items in your cart.
- <t:actionlink t:id="clear">Remove Allt:actionlink>.
嵌入的组件应该有两个Tapestry相关参数。
-
组件的唯一id(在其容器中)。
-
对于组件一个可选的用逗号分隔的混入组件的列表。
这些属性被指定在t:命名空间(t:id=”clear”);
如果id属性被忽略,Tapestry会给这个元素赋一个唯一id。
其他属性用于绑定组件的参数bind parameters of the component.,这些可能是正式参数或非正式参数。正式参数将会有一个默认的绑定前缀(通常是"prop:"),非正式参数假定为字面的(如,"literal:"绑定前缀)。
对于其他所有属性,t:前缀的使用是可选的。一些用户实现一个用于Tapestry模板文件校验的构建程序…此时,任何Tapestry相关的属性,非底层DTD或scheme定义的,应该在Tapestry的命名空间里,避免产生校验错误。
Tapestry组件元素的开始和结束标签定义了组件的body,这常见于一些组件封入到另外的组件body里。
- <t:form>
- <t:errors/>
- <t:label for="userId"/>
- <t:textfield t:id="userId"/>
- <br/>
- <t:table for="password"/>
- <t:passwordfield t:id="password"/>
- <br/>
- <input type="submit" value="Login"/>
- t:form>
在一些场合下,组件需要某种闭合标签;比如,以上所有字段域组件如果没有被Form组件所封闭将会抛出一个运行时异常。
可能将Tapestry组件放置在子包里。比如,你的应用中有一个包org.example.myapp.components.ajax.Dialog。这个组件正常的类型名是"ajax/dialog"(因为它在ajax子文件夹下),这个名字是有问题的,因为它不能通过元素名<t:ajax/dialog>有效地定义XML元素。此时,我们使用句点替换斜线——<t:ajax.dialog>。
隐性标识
Tapestry4中一个特别的特性是隐性标识,用来标记普通的HTML元素为组件。隐性标识可以让模板更加简洁及更好的可读性。
Tapestry 5中,我们使用命名空间id或类型属性来标记一个任意的元素为组件,例如:
- <p>
- Merry Christmas:
- <span t:type="Count" end="3">
- Ho!
- span>
- p>
id、type和mixins属性必须放在Tapestry的命名空间里。任何其他的属性可以在Tapestry命名空间里或默认的命名空间里。当被标识的元素属性未被定义时,将这个属性放入Tapestry的命名空间里是有用的。
只指定t:id属性而不在模板或类中提供明确的类型也是有效的。这种情况,Tapestry会使用Any组件,它有点像是任何其他组件的一种替代。
在大多数情况下,在普通嵌入组件和隐性标识组件之间选择是一个美学问题。少数情况下,如Loop组件,其行为决定于你的选择。当Loop组件使用隐式标识的方式时,将会在其body外围呈现标签及任何非正式参数。因此,比如:
- <table>
- <tr t:type="loop" source="items" value="item" class="prop:rowClass">
- <td>${item.id}td>
- <td>${item.name}td>
- <td>${item.quantity}td>
- tr>
- tabel>
这里,loop组件并入<tr>元素里,它将对每一个列表项呈现一个<tr>,以及在<tr>中输出一个动态的class属性。
发表评论
-
(3)Tapestry5学习小结:显示问题
2007-06-27 11:34 5394显示问题 我在做验证的 ... -
(2)Tapestry5学习小结:中文验证问题
2007-06-27 10:54 4437Tapestry5学习小结:中文验证问题 Tapestry5. ... -
(1)Tapestry5学习小结:中文问题
2007-06-27 10:29 5617(1) Tapestry中文问题 在目前的Tapestr ... -
(F1)Tapestry Upload:Tapestry Upload Component
2007-06-23 12:41 2922本文翻译出处 http://tapestry.apac ... -
(E1)Tapestry-Test
2007-05-28 16:06 3179本文翻译出处 http://tapestry.apache ... -
(D1)Tapestry-Spring Integration
2007-05-28 15:17 3835本文翻译出处 http://tapestry.apache ... -
(C15)Tapestry IoC:Service Builders Shadow Services
2007-05-28 13:45 2613本文翻译出处 http://tap ... -
(C14)Tapestry IoC:Service Builders Building Pipelines
2007-05-28 12:45 2482本文翻译出处 http://tapestry.apache. ... -
(C13)Tapestry IoC:Service Builders Strategy Pattern
2007-05-28 11:30 2245本文翻译出处 http://tap ... -
(C12)Tapestry IoC:Service Builders Chain of Command
2007-05-28 10:10 2267本文翻译出处 http://tap ... -
(C11)Tapestry IoC:Ordering by Constraints
2007-05-27 15:27 2028本文翻译出处 http://tap ... -
(C10)Tapestry IoC:Object Providers
2007-05-27 14:38 2216本文翻译出处 http://tapestry.apache ... -
(C9)Tapestry IoC:Starting the Registry
2007-05-27 11:44 1947本文翻译出处 http://tap ... -
(C8)Tapestry IoC:Symbols
2007-05-27 10:48 2008本文翻译出处 http://tapestry.apache ... -
(C7)Tapestry IoC:Case Insensitivity
2007-05-26 17:02 1642本文翻译出处 http://tapestry.apache ... -
(C6)Tapestry IoC:Type Coercion
2007-05-26 14:29 1752本文翻译出处 http://tap ... -
(C5)Tapestry IoC:Tapestry IoC Configurations
2007-05-26 09:19 1751本文翻译出处 http://tapestry.apache ... -
(C4)Tapestry IoC:Tapestry IoC Decorators
2007-05-25 10:19 1845本文翻译出处 http://tapestry.apache ... -
(C3)Tapestry IoC:Tapestry IoC Services
2007-05-24 13:04 1874本文翻译出处 http://tapestry.apache ... -
(C2)Tapestry IoC:Tapestry IoC Modules
2007-05-22 12:47 2056本文翻译出处 http://tapestry.apache ...
相关推荐
### Tapestry 5:构建 Web 应用程序 #### 一、Tapestry 5 概述 Tapestry 5 是一个强大的 Java Web 开发框架,它为开发者提供了高效且简洁的方式去创建复杂的 Web 应用程序。本书《Tapestry 5:构建 Web 应用程序》...
Tapestry是一项基于组件的web展现层技术,这里将它划分成业务工程HelloTapestry及Component工程源码两项.实际项目中,Component可以成为不同项目中抽离出来的通用的模块,与具体的业务脱离。
- **实现方式**: 通过`<tapestry:link>`标签或`<tapestry:component>`中的`href`属性来实现页面间的跳转。 - **应用场景**: 用户操作后导航到新的页面。 **1.3 初始化** - **初始化方法**: `init()`方法是在组件...
<tapestry:propertySelection name="country" label="Country" model="${countries}" /> ``` **14. Table组件:** - **用途:**用于创建表格。 - **示例代码:** ```xml <tapestry:table data-model="${users}...
1. **Tapestry Core**: 这是Tapestry框架的基础部分,包含了核心组件、服务容器(Tapestry IoC)和页面生命周期管理。通过源码分析,我们可以理解其如何实现页面组件的渲染、事件处理和依赖注入。 2. **Tapestry ...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
这个压缩包包含了多个以"Tapestry"开头的子文件,如 "tapestry-core", "tapestry-hibernate", "tapestry-ioc", "tapestry-upload", 和 "tapestry-spring",这些都是Tapestry框架的不同模块或插件。这些文件的后缀是...
2. **Tapestry Core**:`tapestry-core-5.3.8.jar`是Tapestry框架的核心库,包含了框架的基础组件、服务和API。它提供了页面、组件、事件处理、URL映射等功能,是构建Tapestry应用的基础。 3. **Plastic**:`...
挂毯React 将React( )与Tapestry( )一起使用。 该库提供了将Tapestry与JSX模板结合... define ( [ 't5/core/dom' , 'react' , 'react-dom' ] , function ( dom , React , ReactDOM ) { var HelloMessage = React
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...
- **tapestry-core**:Tapestry的核心库,包含了框架的主要功能和API。 - **tapestry-test**:测试支持模块,提供了针对Tapestry应用的单元测试和集成测试工具。 - **tapestry-spring**:Tapestry与Spring框架的...
《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...
8. **tapestry-hibernate-NOTICE.txt, tapestry-hibernate-core-NOTICE.txt, tapestry-ioc-NOTICE.txt**:与对应的LICENSE文件类似,这些NOTICE文件列出了在Tapestry的这些特定模块中使用到的第三方组件和它们的版权...
4. **下载Tapestry:** - 从Tapestry官方网站下载tapestry-bin-5.1.0.5.zip,并保存以备后续使用。 5. **新建Web项目:** - 在Eclipse中启动一个新的Web项目,并按照指示进行配置。 - 创建项目时选择合适的Web...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型来构建动态、数据驱动的Web应用。本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用...
资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...
### Tapestry5:构建Web应用程序 #### 一、Tapestry5概述 Tapestry5是一种先进的、基于Java的Web开发框架,它以其强大的功能、灵活性以及易用性著称。该框架由Howard Lewis Ship创建,并由Apache软件基金会维护。...
Tapestry是一个分布式系统基础设施,专门设计用于实现容错性的广域定位和路由。这个系统由Ben Y. Zhao、John Kubiatowicz和Anthony D. Joseph等人在加州大学伯克利分校的计算机科学部开发,旨在应对无处不在计算的...
《Tapestry4开发指南》是由干煸四季豆编写的,旨在帮助开发者深入理解并熟练运用Tapestry4这一框架进行应用开发。Tapestry4是一个基于Java的Web应用程序框架,它强调组件化、模版驱动和声明式编程,极大地提高了开发...