Tapestry4学习指引(一)

常识:
     "@"表示访问类的静态变量或静态方法. 例如:value="ognl:@com.ttdev.shop.ProductDetails@ADD_TO_CART_BUTTON"/>
 


一。tapestry模板中用到的组件有两种,一种是隐含组建常用jwcid="@XXX"的格式调用;另外一种是显式声明式组建,常用jwcid="XXX"的方式调用;

二。tapestry的组件中:有的组件使用了本身的body,有的没有使用本身的body. 凡是在tapestry组件规范中声明allow-body属性为allowed 的,即该组件使用了本身的body.否则则没有使用本身的body.
   注意:不能在allow-body属性为removed 的组件中嵌套其他的组件,否则tapestry会报错。

三。组件的id。
  对于显式组件其id就是该组件的名称。对于隐含式组件如果没有在"@"号前指定id,则为匿名的组件,此时tapestry会在组件名称前加上"$"符号,例如第一个匿名@Insert组件会被带上默认的id:"$Insert" ,在这之后的@Insert组件则会依次默认为“$Insert$0”, “$Insert$1”, 等;

三。监听方法的可以带参数,也可以不带参数;其返回类型可以是void,string,或实现了IPage接口的object
几种可用的监听方法有:
  public type method(parameters)
  public type method(IRequestCycle cycle, parameters)
  public type method()
  public type method(IRequestCycle cycle)

四,input组件输入值的验证
   tapestry3中的验证仅仅限于vaildField组件,但在tapestry4.o中,可以面向所有的input组件。


五。属性注入:
 包括:元数据注入,对象注入,页面注入,脚本注入,状态注入,
 
  1。页面注入常用于监听方法中(例如):
  <inject property="detailsPage" type="page" object="Details"/>
  public abstract Details getDetailsPage();
 
  public IPage doShowDetails(long productId)
  {
    Details details = getDetailsPage();
   
    details.setProductId(productId);
   
    return details;


六.tapestry中的临时对象和持久对象
    transient state临时状态 (state that is only needed during the actual processing of the request)
    persistent state持久状态 (state that should be available during the processing of this and subsequent requests).
    object pool 对象池 :Tapestry uses an object pool to store constructed page instances. As a page is needed, it is removed from the page pool. If there are no available pages in the pool, a fresh page instance is constructed.

    在tapestry3.0及早期的版本中,对于持久的状态都保存在httpSession里面。但是从tapestry4.开始,可以放在httsession中,也可以放在Client中;

七.tapestry4中属性元素的声明
     从tapestry4.0开始,在.page文件中声明的属性不需要规定其类型;tapestry4会自己在.java文件中寻找与该属性对应的getter,setter方法,然后根据getter,setter方法的操作类型,来确定属性的类型;


八. tapestry中使用HiveMind
      tapestry和HiveMind有密切的联系,可以将hiveMind1.1邦定到tapestry4.0,可以用HiveMind管理tapestry : 用于将属性或服务通过tapestry的<inject/>注入到tapestry实例中;
       举例说明具体用法:
          1. 在项目中配置好 HiveMind.xml配置文件,HiveMind.xml的文件结构可以是:META-INF/hivemodule.xml  或 /WEB-INF/applicationId/hivemodule.xml  或 /WEB-INF/hivemodule.xml
    (如下片断):
               <!-- 注册聊天服务 -->
  <contribution configuration-id="tapestry.services.ApplicationServices">
   <service name="chat" object="service:ChatService"/>
  </contribution>
  
  <!-- 聊天服务 -->
  <service-point id="ChatService" interface="org.apache.tapestry.engine.IEngineService">
   <invoke-factory>
    <construct class="com.ce.dnaq.chat.qiantai.XChatService">
      <set-object property="responseRenderer" value="infrastructure:responseRenderer"/>
     <set-object property="response" value="infrastructure:response"/>
     <set-object property="linkFactory" value="infrastructure:linkFactory"/>
    </construct>
   </invoke-factory>
  </service-point>
 
          2.在需要该服务的.page文件中声明
       <inject property="service" object="engine-service:chat" />
     

   3.在对应的java文件中:  
      /**注入服务*/
      public abstract IEngineService getService();
            
   解释说明:  在.page文件中的前缀"engine-service:" 是tapestry扩展了HiveMind的服务的名称; "engine-service:chat"表示注入tapestry的chat服务,该服务(即:chart)在HiveMind.xml配置文件中已经配置好。
     
      tapestry扩展的服务名称有:"app-property , engine-service ,global-property ,infrastructure"
              各个作用说明如下:
         (1).app-property  :
       用于 The application specification's <meta> properties
       The servlet's <init-parameter> elements
       The servlet context's <init-parameter> elements
       The delegate property source (a <extension>)
       A HiveMind symbol
      用法示例: app-property:org.apache.tapestry.template-extension
              
        (2). engine-service :
              The locator is the name of an engine service (an instance of IEngineService).
                    用法示例: engine-service:page

               (3). global-property:
              定义在 servlet <init-parameter>, a servlet context <init-parameter>, or a HiveMind symbol. 中的全局属性名称;
      用法示例: global-property:org.apache.tapestry.disable-caching

        (4). infrastructure :
       由tapestry.Infrastructure service提供的属性, this service provides access to the key Tapestry services. 
                    用法示例: infrastructure:applicationSpecification

九. Friendly URLS 结合 HiveMind 的使用
    
     1. 在HiveMind文件中有如下配置;
         <!-- 部署FriendlyURL -->
  <contribution configuration-id="tapestry.url.ServiceEncoders">
  <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect" />
  <page-service-encoder id="page" extension="page" service="page" />
  <page-service-encoder id="external" extension="external" service="external" />
  <asset-encoder id="asset" path="/assets" />
  <extension-encoder id="ext" extension="svc" after="*" />
 </contribution>
       在web.xml中配置  <servlet-Mapping>  例如:
        <servlet-mapping>
   <servlet-name>dnaq</servlet-name>
   <url-pattern>*.page</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
   <servlet-name>dnaq</servlet-name>
   <url-pattern>*.external</url-pattern>
  </servlet-mapping>
    2.说明:
        A.  <page-service-encoder id="page" extension="page" service="page" />表示任何的.page页面访问被视为page templates对待。
     如果将其改为 <page-service-encoder id="page" extension="html" service="page" />表示将所有的对.html的访问被视为page templates对待。
  
       B.  <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect" />
          direct:表示内部组件在刷新,提交(表单)时,是否单独刷新内部组件而不刷新整个页面,一般情况下为true,及不刷新整个页面.(P250 Enjoin Web Dep开发)
          示例URL:  A typical URL might be: /admin/Menu,border.link.direct.
   表示以  .direct后缀结尾的内部组建id名称为“border.link”的组件状态是没有状态的。
   如果是以.sdirect后缀结尾,则表示是有状态的(放在httpsession范围内)。
 

       C. <asset-encoder id="asset" path="/assets" />
          在web.xml中配置<servlet-mapping>
     <servlet-name>myapp</servlet-name>
     <url-pattern>/assets/*</url-pattern>
   </servlet-mapping>
          用于asset service,asset service负责将本地资源返回给请求资源的客户端,但为了防止客户端的非法资源请求,可以在此限定可以访问的路径;本例中:即path="/assets",也就是只有在 "/assets"目录或其子目录下的资源才能被客户端所请求。例如:app/assets/image/tt.jif


十. tapestry属性配置
       tapestry属性,有的是直接在程序中声明使用,有的是JVM属性,需要在服务器中才能有效;


十一. Tapestry对象属性。(Object Properties)
      一个page有许多属性(继承自AbstractComponent或BasePage等基类),也包含许多组件和其他对象的属性. Pages是和engine相关联的, engine暴露他自身的一些属性。这些属性包括如下:
         assets(Icomponent),beans(Icomponent),bingdingNames(Icomponent),bingdings(Icomponent),body,bodyCount,components(Icomponent),changObserver(Ipage),classObserver(IEngine),container,disabled,displayName,engine,form,global,id,idPath,listeners,locate,local,location,messages,name,namespace,outputEncoding,page,propertySource,pageName,pageSource,rendering,requestCycle,scriptSource,specification,sepcification,specificationSource,vist(IEngine),vist(Ipage)等;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值