Tapestry4应用指南-安装及实例

Apache Tapestry入门教程:构建后端开发的自学指南 Apache Tapestry是一个基于组件的Web应用程序框架,它使用Java编程语言,并通过强大的模板引擎和组件化的开发模式来简化Web应用程序的开发过程。它提供了丰富的功能,包括依赖注入、表单验证、事件处理等,使得开发者可以更专注于业务逻辑的实现。Apache Tapestry是一个基于组件的Web应用程序框架,使用Java编程语言。它通过强大的模板引擎和组件化的开发模式来简化Web应用程序的开发过程。它提供了丰富的功能,包括依赖注入、表单验证、事件处理等,使得开发者可以更专注于业务逻辑的实现。 阅读详情

1.安装

1.1.ApplicationServlet配置
在应用配置文件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 Tutorial: Hello </ display-name >
  
< servlet >
    
< servlet-name > tapestryGuide1 </ servlet-name >
    
< servlet-class > org.apache.tapestry.ApplicationServlet </ servlet-class >
    
< load-on-startup > 0 </ load-on-startup >
  
</ servlet >
  
< servlet-mapping >
    
< servlet-name > tapestryGuide1 </ servlet-name >
    
< url-pattern > /app </ url-pattern >
  
</ servlet-mapping >
</ web-app >

1.2增加tapestry所需Jar包

backport-util-concurrent-3.1.jar
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-fileupload-1.2.jar
commons-io-1.4.jar
commons-lang-2.3.jar
commons-logging-1.0.3.jar
commons-pool-1.4.jar
hivemind-1.1.1.jar
hivemind-lib-1.1.1.jar
javassist-3.6.ga.jar
ognl-2.7.2.jar
oro-2.0.8.jar
tapestry-contrib-4.1.5.jar
tapestry-framework-4.1.5.jar

1.3新建Home页面

< html >
  
< head >
    
< title > Tutorial: HelloWorld </ title >
  
</ head >
  
< body >
    
< h1 > HelloWorld Tutorial </ h1 >
    
< p >
  The current data and time is: 
  
< strong >< span  jwcid ="@Insert"  value ="ognl:new java.util.Date()" > June 26 2005 </ span ></ strong >
</ p >     

< p >
  
< a  href ="#"  jwcid ="@PageLink"  page ="Home" > refresh </ a >
</ p >
    
  
</ body >
</ html >

1.4页面规范Home.page

<? xml version="1.0" encoding="UTF-8"  ?>
<! DOCTYPE page-specification PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 4.1//EN"
  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_1.dtd"
>
< page-specification >
</ page-specification >

1.5小结

以上的页面模板,页面规范,页面类及后面例子中的应用配置文件 位于应用WEB-INF目录下

Tapestry页面模板就是在普通的HTML文件中给对应DOM元素增加jwcid属性,可以利用HTML设计
工具打开,真正做到"所见即所得".
jwc是java web component的简写
jwcid值有三种情况
假设要展现一表示用户名(username)的输入域,有如下三种方式
a.<input type="text" jwcid="username" size="20"/>
jwcid="username" 指定名称为username的组件,其定义在页面规范中定义
中如
<component id="username" type="TextField">
  <binding name="value" value="username"/>
</component>
b.<input type="text" jwcid="@TextField" value="ognl:username" size="20"/>
c.<input type="text" jwcid="username@TextField" size="20"/>
以上三种页面输出
<input type="text" name="username" id="username" value="" size="20"/>

第一种为显示调用输入组件,生成组件id="username"
第二种为隐式调用输入组件,组件id由系统自动生成
第三种即显示又隐式调用,生成组件id="username"
以上三种方式组件值都绑定到页面类的username属性

2.实例登陆

2.1应用规范配置tapestryGuide1.application

<? xml version="1.0" ?>
<! DOCTYPE application PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 4.1//EN"
  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_1.dtd"
>
< application  name ="Tapestry Guide" >
    
< meta  key ="org.apache.tapestry.template-encoding"  value ="GB2312" />
    
< meta  key ="org.apache.tapestry.messages-encoding"  value ="GB2312" />
    
< meta  key ="org.apache.tapestry.output-encoding"  value ="GB2312" />
    
< meta  key ="org.apache.tapestry.page-class-packages"  value ="org.jceun.example" />    
</ application >

2.2页面模板Home.html

< html  jwcid ="@Shell"  title ="Login" >  
  
< body  jwcid ="@Body" >
  
< style >
.fieldMissing 
{
    background
: #bedef4;
}


.fieldInvalid 
{
    background
: #ffaf7e;
    font-weight
: bold;
}

.alertButton 
{
        width
: auto;
        border
: none;
        background-color
: #699ED9;
        color
: #fff;
        padding
: 0.1em;
        border-bottom
: 1px solid #5885b6 !important;
        border-right
: 1px solid #5885b6 !important;
        border-top
: 1px solid #92b8e2 !important;
        border-left
: 1px solid #92b8e2 !important;
        cursor
: hand;
        cursor
: pointer;
}


.alertDialog 
{
    width
: 30em;
    border
: 2px solid #ff660a;
    padding
: 1em;
    background
: #ffffff;
    -moz-border-radius
: 10px;
}


.alertContent .alertButton 
{
    float
:right;
    position
:relative;
    bottom
:1em;
}


.missingList, .invalidList 
{
    padding-bottom
: 0.6em;
    padding-top
: 0.2em;
    padding-left
:0.1em;
    padding-right
:0.2em;
    margin
: 0;
}


.missingList 
{
    border-top
: 4px solid #bedef4;
}


.invalidList 
{
    border-top
: 4px solid #ffaf7e;
}


.missingList li, .invalidList li 
{
    list-style
:none;
    font-style
:italic;
}

  
</ style >
  
< br >< br >< br >
  
< center >
  
< font  color ="red" >< span  jwcid ="@Insert"  value ="ognl:errorMsg" /></ font >
  
< form  jwcid ="loginForm@Form"  clientValidationEnabled ="true" >    
    
< table  border ="1"  cellpadding ="0"  cellspacing ="0"  bordercolor ="#87cefa"  bordercolorlight ="#bedef4" >
    
< tr >
    
< td  align ="right" >< span  jwcid ="@FieldLabel"  field ="component:username" > 用户名: </ span ></ td >
    
< td >< input  type ="text"  jwcid ="username@TextField"  value ="ognl:username"  displayName ="literal:用户名"  
    validators
="validators:required[用户名不能为空]"  size ="20" /></ td >
    
</ tr >
    
< tr >
    
< td  align ="right" >< span  jwcid ="@FieldLabel"  field ="component:password" > 密码: </ span ></ td >
    
< td >< input  type ="password"  jwcid ="password@TextField"  hidden ="true"  value ="ognl:password"  
    validators
="validators:required[密码不能为空]"  displayName ="literal:密码"  size ="20" /></ td >
    
</ tr >
    
< tr >
    
< td  colspan ="2" >< input  type ="submit"  jwcid ="logicBtn@Submit"  value ="登陆"  listener ="listener:login" /></ td >
    
</ tr >
    
</ table >
  
</ form >
  
</ center >
  
</ body >
</ html >

2.3页面规范Home.page

<? xml version="1.0" encoding="UTF-8"  ?>
<! DOCTYPE page-specification PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 4.1//EN"
  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_1.dtd"
>
< page-specification  class ="org.jceun.example.Home" >
</ page-specification >

2.4页面类Home.java

package  org.jceun.example;

import  org.apache.tapestry.html.BasePage;

public   abstract   class  Home  extends  BasePage  {
    
public abstract String getUsername();

    
public abstract String getPassword();

    
public abstract void setErrorMsg(String msg);

    
public String login() {        
        System.out.println(
"username=" + getUsername());
        System.out.println(
"password=" + getPassword());
        
if (getUsername().equals("ceun") && getPassword().equals("123456"))
            
return "Welcome";
        
else {        
            setErrorMsg(
"用户名或密码错误!");
            
return this.getPageName();
        }

    }

}

2.5服务端校验

Home.html使用的是客户端校验,下面介绍服务端校验

Home.html改成

< html >
  
< head >
    
< title > Login.html </ title >     
  
</ head >
  
  
< body >
   
< br >< br >< br >
  
< center >
  
< font  color ="red" >< span  jwcid ="@Insert"  value ="ognl:errorMsg" /></ font >
  
< span  jwcid ="error" />
  
< form  jwcid ="loginForm" >    
    
< table  border ="1"  cellpadding ="0"  cellspacing ="0"  bordercolor ="#87cefa"  bordercolorlight ="#bedef4" >
    
< tr >
    
< td  align ="right" >< span  jwcid ="@FieldLabel"  field ="component:username" > 用户名: </ span ></ td >
    
< td >< input  type ="text"  jwcid ="username"  size ="20" /></ td >
    
</ tr >
    
< tr >
    
< td  align ="right" >< span  jwcid ="@FieldLabel"  field ="component:password" > 密码: </ span ></ td >
    
< td >< input  type ="password"  jwcid ="password"  size ="20" /></ td >
    
</ tr >
    
< tr >
    
< td  colspan ="2" >< input  type ="submit"  jwcid ="logicBtn"  value ="登陆" /></ td >
    
</ tr >
    
</ table >
  
</ form >
  
</ center >
  
</ body >
</ html >

Home.page改成

<? xml version="1.0" encoding="GB2312"  ?>
<! DOCTYPE page-specification PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 4.1//EN" 
  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_1.dtd"
>
< page-specification  class ="org.jceun.example.Home" >
    
< bean  name ="delegate"  class ="org.apache.tapestry.valid.ValidationDelegate" />
    
< component  id ="loginForm"  type ="Form" >
        
< binding  name ="delegate"  value ="beans.delegate" />
    
</ component >
    
< component  id ="error"  type ="Delegator" >
        
< binding  name ="delegate"  value ="beans.delegate.firstError" />
    
</ component >
    
< component  id ="username"  type ="TextField" >
        
< binding  name ="value"  value ="username" />
        
< binding  name ="displayName"  value ="literal:用户名" />
        
< binding  name ="validators"  value ="validators:required[用户名不能为空]" />
    
</ component >
    
< component  id ="password"  type ="TextField" >
        
< binding  name ="value"  value ="password" />
        
< binding  name ="displayName"  value ="literal:密码" />
        
< binding  name ="hidden"  value ="true" />
        
< binding  name ="validators"  value ="validators:required[密码不能为空],minLength=6" />
    
</ component >   
    
< component  id ="logicBtn"  type ="Submit" >       
        
< binding  name ="listener"  value ="listener:login" />
    
</ component >
</ page-specification >

Home.java改成

package  org.jceun.example;

import  org.apache.tapestry.html.BasePage;
import  org.apache.tapestry.valid.ValidationDelegate;

public   abstract   class  Home  extends  BasePage  {
    
public abstract String getUsername();

    
public abstract String getPassword();

    
public abstract void setErrorMsg(String msg);

    
public String login() {
        ValidationDelegate delegate 
= (ValidationDelegate) this.getBeans()
                .getBean(
"delegate");
        
if (delegate.getHasErrors()) {
            
return this.getPageName();
        }

        System.out.println(
"username=" + getUsername());
        System.out.println(
"password=" + getPassword());
        
if (getUsername().equals("ceun") && getPassword().equals("123456"))
            
return "Home";
        
else {        
            setErrorMsg(
"用户名或密码错误!");
            
return this.getPageName();
        }

    }

}
15、Tapestry中的调度应用开发指南 本文详细介绍了如何使用Tapestry框架构建一个功能丰富的调度应用。内容涵盖应用初始化、页面构建、自定义表格组件的开发,并解析了关键代码和实际应用中的注意事项。通过Tapestry的强大组件和灵活配置,开发者可以高效实现可维护的Web应用。 阅读详情

相关推荐

基于Tapestry4的水果店Web应用实战项目

Tapestry4作为Java Web开发中高度组件化的代表框架,采用事件驱动与面向对象的设计理念,将Web界面抽象为可复用的组件树结构。每个页面由多个嵌套组件构成,通过声明式模板与Java类绑定,实现表现层与逻辑层的无缝衔接。框架基于Servlet API构建,但屏蔽了底层细节,开发者无需直接处理HTTP请求,而是通过引擎(Engine)调度页面激活、事件分发与响应渲染流程。

weixin_31938351的博客 471

Tapestry4入门

 1.       Tapestry4开发环境的安装JDK:5.0开发工具:Eclipse3.2 , WTP 1.5.2服务器:Tomcat 5.5.202.       Tapestry4下载http://tapestry.apache.org版本:tapestry-project-4.1.1-bin.zip3.     安装Tapestry4解压下载下来的t

楓雨人生 2958

Eclipse Tapestry Tools:Tapestry框架的开源Eclipse插件深入解析

Tapestry是一个基于Java的Web应用框架,它从一开始就致力于简化Web页面的开发,并提高开发效率和可维护性。本章将引领读者进入Tapestry的世界,从其起源说起,逐步深入理解该框架的设计哲学、核心概念以及如何着手进行基本操作。Eclipse Tapestry Tools插件将Tapestry框架开发的便捷性提升到了新的高度。从安装配置、代码辅助、页面预览到项目管理,每一项功能都经过精心设计,以满足现代Web开发的需求。

weixin_28999139的博客 815

Tapestry4学习指引(一)

常识:     "@"表示访问类的静态变量或静态方法. 例如:value="ognl:@com.ttdev.shop.ProductDetails@ADD_TO_CART_BUTTON"/&gt;  一。tapestry模板中用到的组件有两种,一种是隐含组建常用jwcid="@XXX"的格式调用;另外一种是显式声明式组建,常用jwcid="XXX"的方式调用; 二。tapestry的组件中:有...

嘉鸿日月星空 303

Tapestry环境搭建

JDK 1.5+Eclipse 3.2+ Tapestry4.0环境搭建

tapestry4开发指南

tapestry4开发指南,一本很实用的书籍,适合初学者

Tapestry 4框架基本用法说明及代码样例

Tapestry 4框架基本用法说明及代码样例

道友 385

Tapestry 4 官方文档中版本

Tapestry 4 官方文档中版本 Tapestry 4 官方文档中版本 Tapestry 4 官方文档中版本

Tapestry入门实例

 今天开始接触到Tapestry框架,用的是Tapestry3.03包(MyEclipse 的tapstry插件),开发环境是Eclipse,Web服务器用的是Weblogic。参照的教程是《享受Tapestry给Web开发带来的乐趣》,果然它不辱使命,给我带来了无限的“乐趣”。可能教程上用的是Tapestry4,而我使用的是Tapestry3的缘故吧,好象高版本是有了很多新功能,我完全找

netwares的专栏 1822

Tapestry4环境搭建和应用

Tapestry4开发指南,环境搭建和基本应用

tapestry4和5学习资料

该包包含: Tapestry5最新中文教程.doc tapestry.pdf tapestry开发流程.docx Tapestry开发指南0.8.pdf tapestry用户手册.pdf

Tapestry学习一 环境搭建及HelloWorld应用

学习顺序参照Enjoying Web Development with Tapestry此书,本人有此书的全部,有需要着请在此处留下邮箱!第一章          Tapestry开发环境搭建1 用到的开发工具和软件包:开发工具:    JDK 1.5    java.sun.com Tomcat5.5 jakarta.apache.orgEclipse 3.1 www.e

Jack Wu 4028

java Tapestry4.1.2入门说明教程第1/2页

不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性!

Tapestry简介

Tapestry简介 efly 原创  (参与分:730,专家分:980)   发表:2003-7-2 下午2:10   更新:2003-7-8 上午11:16   版本:1.0   阅读:5452次 你熟悉组件编程吗? 你想要高性能的网站吗? 你想要网页脱离杂乱的脚本语言吗?是,我要关注并学习Tapestry!Tapestry是一个新的针对Web的应用框架(Appli

三V工作室·泰伯子仪 1835

科研党必备:5分钟搞定MATLAB闪退问题(含R2020a-R2023b各版本适配)

本文针对科研人员常见的MATLAB闪退问题,提供了从R2020a到R2023b各版本的适配解决方案。通过分析六大诱因和版本定制化修复方法,帮助用户快速诊断和解决闪退问题,包括内存优化、高级调试和预防性维护等实用技巧,确保科研计算的连续性和稳定性。

t1u2v的博客 1958

实用工具抓取youtube热门数据

YouTube作为全球第二大搜索引擎,2024年日均视频播放量突破50亿次,头部创作者单月广告分成可达百万美元量级。但对数据分析者而言,其反爬机制堪称业界最严: ‌反爬技术升级‌:Google部署的Botguard系统可检测异常流量,触发机制包括: 单IP每小时请求超过50次即封禁 检测Headless浏览器指纹(如Chrome的navigator.webdriver属性) 动态加载内容(如评论数据需滚动页面3次后加载) ‌数据价值维度‌:某MCN机构研究显示,前100热门视频的标题关键词复用率高达67%

26万+

Tapestry4+Spring+Hibernate整合实例及说明

      对最近学习的技术做了一个小练习,实现用户信息的维护,其中用户数据在MySQL中通过测试,三个框架整合的说明详见程序文件夹中的word文档,希望对tapestry初学者有所帮助。      学习tapestry的一点建议:         Tapestry4最好的学习资料是参考Enjoying Web Development with Tapestry. 对照书中的讲解做

truddysnow的专栏 1373

Coze HTTP请求节点实战:5分钟搞定天气API对接(含动态参数技巧)

本文通过一个天气预报API对接的实战案例,详细讲解了如何在Coze平台使用HTTP请求节点实现外部数据交互。文章重点演示了动态参数传递、JSON响应解析与错误处理等核心技巧,帮助开发者在5分钟内快速构建稳定可靠的智能体外部服务调用能力。

weixin_29233333的博客 675

Tapestry入门

Tapestry带来了真正的Java web应用程序OOP编程,摘自《深入浅出Tapestry》中的一句话。这本书也是我学习Tapestry的参考之一,其他参考资料如《Tapestry in action》《enjoy web de v with tapestry》《Tapestry开发指南》等等也非常不错。Tapestry与其他诸如struts springMVC JSF等framework之间的

DXTimes的博客 931

[特殊字符] 智能补货(AI-driven Replenishment)完整实施方案

补货量=预测需求+安全库存−当前库存补货量 = 预测需求 + 安全库存 - 当前库存补货量=预测需求+安全库存−当前库存。:基于 LSTM/Transformer 预测未来 30/60/90 天的销量。

nbsaas-boot基于Request-Response的企业级快速开发框架 967

【全局路径规划模块运动学算法】无人机Kinodynamic A*算法、Kinodynamic RRT*算法(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Kinodynamic A*算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容啃这个Kinodynamic A_star算法,建议先啃一啃高飞fast_planner那篇论文,把理论打好,如果还是比较迷,就先看Dijksta、再看A_star、再看hybrid A_star 三个的流程,因为往上资料比较多,再看这个Kinodynamic A_star算法,流程已经很相像了。如果。

qq_35635374的博客 2600

Tapestry

=================================================================================一个使用了tapestry的项目包括以下几个部分:jar包(闭上眼睛也应该想得到) ,总共是十三个。WEB-INF下 hivemodule.xml。WEB-INF下 MyTapestry.application,MyTap

我的程序人生 2838

matlab 点云学习目录【2026最新版】

matlab 点云学习目录。博客长期更新,本文最近更新时间为:2026年6月15日。

点云侠的博客 3万+

Tapestry经典入门教程

简单介绍   不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性! 安装jar包 1、 将Tapestry解压目录下的lib目录中的jar包拷贝到WE

棋棋_攻城狮 3554

UCIE Specification详解(八)

Logical Physical Layer(逻辑物理层)

Crazzy_M的博客 1608

124、LLC谐振变换器的矩阵变压器设计

摘要 本文分享了LLC谐振变换器中矩阵变压器的实战设计经验。针对大功率LLC单颗变压器的痛点(绕组层数多、散热不均、漏感一致性差),作者提出将大变压器拆分为多个小变压器单元(建议6个),通过原边串联、副边并联的方式实现功率分配。详细解析了磁芯选型、匝比计算、绕组结构、漏感控制和散热设计等关键参数,特别强调了小磁芯优势、等效匝比计算误区以及三明治绕法的重要性。文中还总结了调试过程中的谐振频率偏移和均流问题解决方案,并给出了矩阵数量选择、磁芯材质、绝缘材料等实用建议。作者指出,矩阵变压器在2kW以上LLC应用中

Jack010169的博客 170
上一篇: 转化字符串表达式为数学公式并算出结果
下一篇: SCA导航1-Apache Tuscany SCA入门
java619
博客等级 码龄20年 12粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值