`
jd20800991
  • 浏览: 41087 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

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)等;

分享到:
评论

相关推荐

    Enjoy Web Dev With Tapestry

    本书《Enjoy Web Dev With Tapestry》不仅是一本入门指南,更是一部深入浅出的实战教程,旨在让读者在学习过程中体验到开发的乐趣。以下为本书的主要特点: 1. **易于上手**:即使是没有Servlet或JSP背景的读者也能...

    24灯十字旋转LED蓝牙版制作资料

    POV系列-24灯十字旋转LED,资料有原理图、PCB丝印图、 改字软件 以及单片机固件,如果有单片机基础完全可以制作参考制作

    大创项目_24.zip

    大学生创业项目源码

    B端安全网关的简单实现#Java#Springboot源码分享

    已实现http协议下的请求转发。支持GET,POST请求以及文件上传,支持IP白名单、apiKey配置。

    【毕业设计】基于uniapp微信小程序电影院选座订票系统设计【源码+论文+答辩ppt+开题报告+任务书】.zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    weixin056基于微信小程序的购物系统+php(文档+源码)_kaic

    weixin056基于微信小程序的购物系统+php(文档+源码)_kaic

    使用mingw编译的openssl-3.4.1,有需要的自取吧

    使用mingw编译的openssl-3.4.1,有需要的自取吧

    Oracle19c netca.rsp

    Oracle19c netca.rsp

    前端小白必看!HTML、CSS、JavaScript 基础全解析

    本资源聚焦前端三剑客基础。课程从 HTML 构建网页结构开始,深入 CSS 样式美化,再到 JavaScript 实现交互逻辑。无论你是零基础小白,还是想巩固基础的学习者,都能通过学习,具备搭建静态网页与简单交互页面的能力,轻松迈进前端开发领域。

    Invoke-WmiCommand.zip

    Invoke-WmiCommand

    (转载)五子棋python

    python五子棋 转载的!!!

    基于springboot框架的Javaweb学科竞赛管理系统(完整源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip

    关键词:学科竞赛管理,Java语言,MYSQL数据库,Vue框架 摘 要 I ABSTRACT II 1绪 论 1 1.1研究背景 1 1.2设计原则 1 1.3论文的组织结构 2 2 相关技术简介 3 2.1Java技术 3 2.2B/S结构 3 2.3MYSQL数据库 4 2.4Spring Boot框架 4 2.5Vue框架 5 3 系统分析 6 3.1可行性分析 6 3.1.1技术可行性 6 3.1.2操作可行性 6 3.1.3经济可行性 6 3.1.4法律可行性 6 3.2系统性能分析 7 3.3系统功能分析 7 3.4系统流程分析 8 3.4.1注册流程 8 3.4.2登录流程 9 3.4.3添加信息流程 10 4 系统设计 11 4.1系统概要设计 11 4.2系统结构设计 11 4.3 系统顺序图 12 4.4数据库设计 14 4.4.1 数据库实体(E-R图) 14 4.4.2 数据库表设计 16 5 系统的实现 19 5.1学生功能模块的实现 19 5.1.1 学生注册界面 19 5.1.2 学生登录界面 20 5.1.3 赛项详情界面 21 5.1.4 个人中心界

    大创项目go后台.zip

    大学生创业项目源码

    基于Wav2Lip384的AI主播项目整合包

    开源项目整合包 更多内容可以查阅 项目源码搭建介绍: 《我的AI工具箱Tauri+Django开源git项目介绍和使用》https://datayang.blog.csdn.net/article/details/146156817 图形桌面工具使用教程: 《我的AI工具箱Tauri+Django环境开发,支持局域网使用》https://datayang.blog.csdn.net/article/details/141897682

    智慧园区解决方案-16PPT(21页).pptx

    智慧园区,作为未来城市发展的重要组成部分,正逐步从传统园区向智能化、高效化转型。这一转型不仅提升了园区的运营管理水平,更为入驻企业和民众带来了前所未有的便捷与高效。智慧园区的总体设计围绕现状分析、愿景规划、设计理念及六位一体配套展开。传统园区往往面临服务体系不完善、智慧应用面不广、信息资源共享能力不足等问题,而智慧园区则致力于打破这些壁垒,通过物联网技术、大数据分析等手段,构建起一个完整的运营服务体系。这一体系不仅覆盖了企业成长的全周期,还通过成熟的智慧运营经验,为产业集群的发展提供了有力支撑。智慧园区的愿景在于吸引优秀物联网企业和人才入驻,促进产业转型,提高社会经济效应,并为民众打造更安全、高效的智慧生活方式。 在智慧园区的服务体系及配套方面,园区围绕“1+1+1”(学院+创客+基地)、“两中心”(园区指挥中心+金融中心)、“三平台”(成果展示+招商+政府)等核心配套,辅以日常生活各方面的配套,真正实现了从人才培养、研发、转化、孵化、加速到发展的六位一体示范园区。园区服务体系包括园区运营管理体系、企业服务体系和产业社区服务体系。园区运营管理体系通过协同办公、招商推广、产业分析等手段,打破了信息数据壁垒,构建了统一园区运营服务。企业服务体系则提供了共享智能展厅、会议室预定、园区信息服务、办事大厅等一系列便捷服务,助力企业快速成长。产业社区服务体系则更加注重周边生活的便捷性,如物联网成果展示平台、智慧物流、共享创客空间等,为入驻企业和民众提供了全方位的生活配套。这些服务体系不仅提升了园区的整体竞争力,还为入驻企业创造了良好的发展环境。 智慧园区的场景应用更是丰富多彩,涵盖了智慧停车、智慧访客、公共服务、智慧楼宇、智慧物业等多个方面。智慧停车系统通过车牌识别、车位引导、缴费等子系统,实现了停车场的智能化管理,极大提升了停车效率。智慧访客系统则通过预约、登记、识别等手段,确保了园区的安全有序。公共服务方面,智慧照明、智慧监控、智慧充电桩等设施的应用,不仅提升了园区的整体品质,还为民众带来了更加便捷、安全的生活环境。智慧楼宇和智慧物业系统更是通过智能化手段,实现了楼宇和园区的统一化管理,提升了运营效率和居住舒适度。此外,智慧园区还通过O2O平台、医疗系统、综合服务系统等手段,将线上线下资源有机整合,为入驻企业和民众提供了全方位、便捷的服务体验。这些场景应用不仅展示了智慧园区的智能化水平,更为读者提供了丰富的想象空间和实施方案参考。 综上所述,智慧园区作为未来城市发展的重要方向,正以其独特的魅力和优势吸引着越来越多的关注。通过智能化手段的应用和服务体系的完善,智慧园区不仅提升了园区的整体竞争力和运营效率,还为入驻企业和民众带来了前所未有的便捷与高效。对于写方案的读者来说,智慧园区的解决方案不仅提供了丰富的案例参考和实践经验,更为方案的制定和实施提供了有力的支撑和启示。

    成熟STM32直流电压电流采集与检测方案:包含PCB设计、KEIL源码及原理图与详细设计说明,完备STM32直流电压电流采集与检测解决方案:PCB、KEIL源码、原理图、设计说明,lunwen复现新型

    成熟STM32直流电压电流采集与检测方案:包含PCB设计、KEIL源码及原理图与详细设计说明,完备STM32直流电压电流采集与检测解决方案:PCB、KEIL源码、原理图、设计说明,lunwen复现新型扩展移相eps调制,双有源桥dab变器,MATLAB simulink仿真 ,核心关键词:lunwen复现; 新型扩展移相eps调制; 双有源桥dab变换器; MATLAB simulink仿真;,复现新型扩展移相EPS调制:DAB双有源桥变换器在MATLAB Simulink中的仿真研究

    大创项目——考古土方运输车小程序端.zip

    大学生创业项目源码

    清华大学 deepSeek 三部曲全集

    清华大学deepseek三部曲PDF

    蓝桥杯算法实战详解:编程界‘奥林匹克’的技术提升之路

    内容概要:本文介绍了蓝桥杯编程竞赛的历史背景及其重要意义,强调其作为编程领域中‘奥林匹克’的地位。文章全面解析了蓝桥杯中涉及的不同类型的赛题,如数学计算、字符串处理、排序算法、图论算法、动态规划、模拟题等,通过实例详细讲解这些算法的设计思路及其实现方式。还分享了在比赛过程中应掌握的实际技巧,包括如何选择恰当的算法、优化代码性能,以及调试技巧等,旨在全面提升编程能力。 适合人群:对编程感兴趣的在校生及初学者、想要提升编程能力的从业者。 使用场景及目标:帮助读者了解并掌握蓝桥杯的比赛内容和技术要点;培养解决复杂编程问题的能力;激发编程兴趣并为参赛做准备。 其他说明:文中穿插成功案例——小乐同学的经历,展现如何从零基础成长为优秀程序员,并通过自身努力在全国比赛中获奖的例子来鼓励读者积极参与此类活动以提升自我价值。最后号召更多编程爱好者参与到蓝桥杯当中,在实践中锻炼和成长。

Global site tag (gtag.js) - Google Analytics