1. Tapestry作为开源框架,属于Servlet的扩展,即建立在Servlet之上的一个框架,并且工作在Servlet Containers或者application server(包含servlet containers)之上,当然理所当然的构建于Servlet Containers或者application server与Tapestry application之间。
2. Tapestry对于系统的构建需要搭配合理的对应层框架以组织合理于需求的软件应用,其并不关心持久层的运作。当然就其自身的组件模式,能够更合理的将程序与页面工作区分开,以达项目工作的同步进行与松藕荷的关联。
3. Tapestry以面向组件思想为中心,将Tapestry application的组成划分成:
页面(page):应用程序由一堆命名唯一的页面组成,每个页面有一个模板和若干组件;
模板(Template):一个用于页面(或一个组件)的HTML模板。Tapestry中,一个模板包括基本的HTML markup,以及一些用于标记组件的特殊属性的标签。
组件(Component):用于Tapestry页面的可重复使用的对象。当一个页面表现时,或者页面中的一个链接被触发时,组件产生相应的HTML代码。多个组件也可以用来构成一个新的组件。
参数(Parameter):组件拥有一些参数,用于组件属性与页面属性之间的连接。组件通常读取自己的参数,但是一些组件(与HTML forms相关)能够更新自己的参数,并且更新与参数绑定的页面属性。
然而Tapestry application的GUI由Template与规范所组成,这样能够更容易的展现Web界面,并得到与整个系统的易维护、易扩展的能力.
4. 作为流行的MVC开发模式,Tapestry component成为了理所当然的Controller,并承担着组织The Model和The View的工作.如同之前说过的page包含着一个或者更多的component,而其对应着一个Template,相互之间的连接由框架的规范进行配置,对于Template中属性所指定的组件,对应的page里有其Parameter的实现,并且所连接的class将根据client所传递的form数据及业务逻辑进行处理,以完成application的工作.
5. Component作为Tapestry中关键的核心,其对Template与Class之间的衔接起着致关重要的作用:
HTML模版
现在来细说一下关于HTML模版。当然针对HTML的FORM表单依然是以组件的形式进行连接即<form jwcid=”name”></form>
对于其他的input类型也是设置相应的jwcid=”name”这些也是需要说的隐式调用。
页面规范
其实在之前的笔记中也做了一些格式性的说明,固定的XML文件头声明,DOCTYPE声明等都不用多说,只是一些元素的自定义与HTML模版的JWCID进行关联等方式需要针对性修改。
<component id=”name” type=”组件类型(HTML类型)”>
<binding name=”” value=””> //这个value和name需要在tapestry文档里进行查阅
</component>
页面类
这是继承于BaseePage类的。Tapestry有个特殊,也就是不需要为页面属性指定类型。其实在我理解,页面类就好比是页面本身的一个业务处理结构与业务处理工作的中心环境,提供对用户数据的分析处理,让程序能够按照业务流程进行工作。
6. Tapestry application的配置: 应用程序项目配置
web.xml配置文件
<?xml version=” 1.0” encoding=”UTF -8” ?>
<!DOCTYPE web-app PUBLIC ”-//SUN Microsystems, Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2.3.dtd”>
<web-app>
<display-name>Tapestry Test</display-name>
<filter>
<filter-name>redirect</filter-name>
<filter-class>org.apache.tapestry.RedireectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>redirect</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Tapestry Test</servlet-name>
<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servleet-mapping>
<servlet-name>Tapestry Test</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mappint>
</web-app>
Tapestry应用程序必须使用ApplicationServlet作为他们的Serlet。有必要可以定义一个子类继承他。
Tapestry应用程序规范
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE application PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN" "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<application name="Tapestry Test">
<meta key="org.apache.tapestry.page-class-packages" value="com.tapestry4.page" />
<meta key=”org.apache.tapestry.visit-class” value=”com.tapestry4.engine.MyVisit”>
<meta key=”org.apache.tapestry.disable-caching” value=”true” />
</application>
7. 针对官方所提供的组件应用按照起提供的组件Parameter进行配置使用,这里需要提到的是OGNL表达示,他是独立于Tapestry框架的表现层框架,其是页面类与组件之间的数据传递纽带,组件参数通过绑定OGNL表达式来访问页面类中的getter/setter方法,当然在Page中默认的表示即”OGNL:XXX”.