Tapestry简述:
Tapestry是一个servle的扩展,它运行于servlet容器(Tomcat)或包含servlet容器的服务器(如Jboss)
通过使用Tapestry,开发者完全不需要使用JSP技术,用户只需要使用Tapestry提供的模板技术即可,
Tapestry实现了视图逻辑和业务逻辑的彻底分离。
Tapestry只有组件或页面两个概念,因此,链接跳转目标要么是组件,要么是页面,没有多余的path概念。
组件名,也就是对象名称,组件名称和path名称合二为一。
有三个文件:html,page,java;流程应该是:html--->page--->(根据application)java类
普通的网页设计工具或浏览器是不能预览组件的
组件事件请求(Component Event Request):通过一个页面请求start.actionlink触发页面类中的方法,根据此方法的
返回结果,让客户端重定向到Another页面
目前,面向组件的Web表现层框架有三种:Tapestry,JSF,Wicket。
a) jwcid属性:(Java Web Component ID)在模板中用来指定组件。
b) <span> 标签:HTML<span>标签是一个用来包容text和elements 的容器,其本身并不能显示任何内容,
仅仅是作为一个stylesheet 协助对页面显示的控制。
span行内元素,在行内定义一个区域,也就是一行内可以被 <span> 划分成好几个区域,从而实现某种特定效果。 <span> 本身没有任何属性。
c) @ 记号:用来标明一个隐式组件。
html页面中:
jwcid:标识里的jwcid所指是被应用的Tapestry控件的Java Web Component ID.例如jwcid="@Form"是隐式地使用控件。
隐式的控件是指直接在页面模板里声明使用的控件,jwcid的前缀 '@ '符号就是通知Tapestry这里声明使用了一个隐式控件
像@Form,@TextField,@Insert,@Submit只是Tapestry框架提供的包含超过40个控件的控件库里的四个。
d)Asset被用访问静态文件如images和 stylesheets,例如<context-asset name="image1" path="images/messageBoard/1.gif"/>
Tapestry中java类的作用:页面初始化函数中,即定义DAO(数据库操作类),执行sql,返回一个list,
将这个list通过page定义的参数set回页面,然后页面展示出来。
表格的<tr>中有元素source="ognl:List" ,source 参数可以接收List 类型或者Object[] 类型。
页面中value="ognl:item" 中item就是page文件中name <property-specification name="item" type="com.lygedi.wtms.dao.items.WtTruckComp" />
type对应sql.xml配置文件中的resultClass:借助items,如com.lygedi.wtms.dao.items.WtTruckComp
xml中的sql语句由WtTruckTrailerDAOImp的方法通过id读取,然后java类调用这个方法
page是页面规范文件
Insert组件就是实现out.print()功能
JWC文件中:
allow-body="no'是说这个控件不允许有body, allow-informal-parameters="yes"是说这个控件允许带非正式参数。
<parameter name="toolItemDescriptions" type="java.util.List" direction="in" required="yes"></parameter>
这个说明ToolBar控件需要配制一个叫toolItemDescriptions的参数,参数类型为java.util.List
direction为in表示这个参数仅仅需要输入,不要输出,required=yes表示这个参数是必须的,一定要提供。
首先这个控件的模版被一个
<span jwcid="$content$"></span> 包围,这个是说明,只有这个区域里的内容才是有意义的,区域外的全被忽略。
©----版权信息(分号必须要)
 ;---空格
---------------------------------------------------------------------------------------------------------------------------
自定义组件:
<1>需要一个html,一个jwc,一个java类(java类一般是org.apache.tapestry.BaseComponent),html和jwc放在WEB-INF中component包下面
jwc文件中<component-specification class="org.apache.tapestry.BaseComponent">指明关联的java类
html文件书写自己显示的信息
<2>在要调用组件的页面,添加<span jwcid="@ediCopyright"></span> -----隐式组件
也可以不用@符号,直接<span jwcid="ediCopyright"></span>但是在html对应的page页面就需要<component id="ediCopyright" type="ediCopyright"></component>
<3>一定要在wtms.application中<component-type type="ediCopyright" specification-path="component/ediCopyright.jwc"/>
即组件写完了必须在命名空间注册一下
执行流程页面发现一个组件名,有@的直接通过application找到jwc路径(没有@的,通过id找到页面对应page中的type再到application中),
再在jwc文件中找到java类建立组件,建立完之后输出html文件的信息
-----------------------------------------------------------------------------------------------------
页面通过jwcid找到jwc文件,java类决定建立这个组件,再到jwc相同目录下的html文件
Component null may not implement the IPage interface.-------------与显示有关的哪个java类没有从IPage家族继承
margin:0px