简单介绍

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

安装jar包

1、

将Tapestry解压目录下的lib目录中的jar包拷贝到WEB-INF/lib目录。

并将重复的包删除(commons-logging.jar/javassist.jar/ognl-2.6.11.jar)

2、

在web.xml中添加:

app

org.apache.tapestry.ApplicationServlet

0

app

/app

这是Tapestry的中央控制器。Tapestry页面的显示,所有的请求,都会被发送到这个Servlet上。

实例1:最简单的Tapestry程序

在WebRoot下添加Home.html

Insert title here

第一个Tapestry程序

并访问网址:

http://localhost:8088/[context path]/app

结果页面显示Home.html里面的内容。

这是因为Tapestry总是会包含一个名字叫”Home”的页面,默认情况下就是根路径下的Home.html

实例2:添加简单的动态内容

Home.html改为:

Insert title here

第一个Tapestry程序

现在时间是:

重新访问网址:http://localhost:8088/[context path]/app

在这个页面上,用到了Tapestry的Insert组件(Component)。它带一个参数,通过一个ognl表达式来传递。

在应用服务器的启动参数中添加:-Dorg.apache.tapestry.disable-caching=true,可以避免每次修改页面模板的时候重启服务器。

jwc = Java Web Component

实例3:创建链接,指向某个页面

Insert title here

第一个Tapestry程序

现在时间是:

刷新

这次,通过一个PageLink组件,指向Home页面,PageLink组件会自动产生指向Home页面的链接(我们不必关心这个链接!)。

实例4:简单的计数器

直到现在为止,我们还没有涉及到java类,但是已经让Tapestry成功运行起来了!该是写点java代码的时候了。我们想要创建一个计数器,每当用户点击“计数器增1”的时候,我们将这个计数器加1,然后在页面上显示出这个结果。

在传统的请求-响应模式中,我们针对这个问题,需要考虑的是:递交一个请求,创建相应的Action来接收这个请求,并维护计数器的值,然后决定成功转向的页面,将结果显示在页面上。

在Tapestry中,我们需要考虑的是:在哪个页面处理这个事件,结果如何显示在页面上?

下面是Home.html

Insert title here

第一个Tapestry程序

现在时间是:

刷新

计数器当前的值是:

计数器增1

DirectLink指定的listener为:doClick,这将触发一个事件,实际上就是将要调用doClick()方法。

doClick()方法将要写在哪里?因为现在的页面,其动态数据无法简单获得,所以,必须给当前页面创建一个对应的类,我们的方法将创建在这个类里面。

package com.bjsxt.crm.web.tapestry.test;

import org.apache.tapestry.annotations.Persist;

import org.apache.tapestry.html.BasePage;

public abstract class Home extends BasePage {

@Persist

public abstract int getCounter();

public abstract void setCounter(int count);

public void doClick(){

int counter = getCounter();

counter = counter + 1;

setCounter(counter);

}

}

注意:在这个例子中,类名需定义为Home;listener的名字为doClick,而不是doClick()

另外,需要在web-inf目录下添加配置文件:app.application

/p>

"-//Apache Software Foundation//Tapestry Specification 4.0//EN"

"http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">

配置的主要目的是让Tapestry了解如何关联页面和页面类。

实例5:带一个参数的计数器

Home.html改为:

Insert title here

第一个Tapestry程序

现在时间是:

刷新

计数器当前的值是:

计数器增1

计数器增5

计数器增10

清空计数器

对应的Home类:

package com.bjsxt.crm.web.tapestry.test;

import org.apache.tapestry.annotations.Persist;

import org.apache.tapestry.html.BasePage;

public abstract class Home extends BasePage {

@Persist

public abstract int getCounter();

public abstract void setCounter(int count);

public void doClick(int increment){

int counter = getCounter();

counter = counter + increment;

setCounter(counter);

}

public void clearCounter(){

setCounter(0);

}

}

实例6:带两个参数的计算器

Home.html

Insert title here

第一个Tapestry程序

现在时间是:

刷新

计数器当前的值是:

计数器增1

计数器增5

计数器增10

清空计数器

计算3+5,

计算结果是:

使用ognl:{param1,param2}这样的方式来传递多个参数。

对应的Home类:

package com.bjsxt.crm.web.tapestry.test;

import org.apache.tapestry.annotations.Persist;

import org.apache.tapestry.html.BasePage;

public abstract class Home extends BasePage {

@Persist

public abstract int getCounter();

public abstract void setCounter(int count);

public abstract int getResult();

public abstract void setResult(int result);

public void doClick(int increment){

int counter = getCounter();

counter = counter + increment;

setCounter(counter);

}

public void clearCounter(){

setCounter(0);

}

public void plus(int a,int b){

setResult(a + b);

}

}

实例7:Tapestry表单及提交

假设现在要提交一个Person对象:

package com.bjsxt.crm.web.tapestry.test;

import java.util.Date;

public class Person {

//姓名

private String name;

//年龄

private int age;

//出生日期

private Date birthday;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

我们在Home页面添加一个链接指向添加页面(AddPerson)

Home.html:

Insert title here

第一个Tapestry程序

现在时间是:

刷新

计数器当前的值是:

计数器增1

计数器增5

计数器增10

清空计数器

计算3+5,

计算结果是:

添加人员信息

AddPerson.html

Insert title here

姓名 年龄 出生日期

注意:在页面中的Tapestry组件(使用了jwcid标记)的标签,必须有相应的close tag,特别注意标签,必须有close tag。

AddPerson.java

package com.bjsxt.crm.web.tapestry.test;

import org.apache.tapestry.event.PageBeginRenderListener;

import org.apache.tapestry.event.PageEvent;

import org.apache.tapestry.html.BasePage;

public abstract class AddPerson extends BasePage implements PageBeginRenderListener{

public abstract Person getPerson();

public abstract void setPerson(Person person);

public void pageBeginRender(PageEvent event) {

setPerson(new Person());

}

public void save(){

Person person = getPerson();

System.out.println("name="+getPerson().getName());

System.out.println("age="+getPerson().getAge());

System.out.println("birthday="+getPerson().getBirthday());

}

}

注意,需定义一个PageBeginRenderListener,来给Person赋予初始化值,否则,OGNL在解释它(Person对象)的属性时,会发生异常!

如何提交中文

我们必须在app.application中添加如下配置:

/p>

"-//Apache Software Foundation//Tapestry Specification 4.0//EN"

"http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">

如何转向其它页面

利用@InjectPage注解直接注入页面。如:

@InjectPage("ShowProject")public abstract ShowProject getShowProject(); public IPage doSubmit() { ShowProject showProject = getShowProject(); showProject.setProject(getProject()); return showProject; }

Tapestry概要

在Tapestry中不用写Action,而是listener method。你不用去构建URL地址,而是使用DirectLink组件,并配置它调用listener method。

Tapestry以组件为中心。所谓以组件为中心,即:

l Tapestry应用程序由一系列页面(page)组成

l 页面由更小的组件(Component)组成

l 组件本身也有可能由其它的组件组合而成的(不限制组合的深度)

l 每个页面会有唯一的,不重复的名字

l 在每个页面里面的组件,其标识也是不能重复的(默认的情况下,Tapestry会给页面中的每个组件自动生成一个ID标识)

Tapestry与Spring的集成

集成需要用到第三方的类库,可以下载: http://howardlewisship.com/downloads/tapestry-javaforge/tapestry-spring-1.0.0-bin.zip

将其解压之后,将其中的jar包拷贝到类路径中。

在我们的页面类中,就可以用@InjectObject(“spring:userManager”)等类似的方法来访问userManager对象了。

如:

@InjectObject("spring:userManager")

public abstract UserManager getUserManager();

Tapestry组件开发

java tapestry_java Tapestry4.1.2入门说明教程相关推荐

  1. PMD【 Java 代码检查工具】入门使用教程(超详细)

    PMD[ Java 代码检查工具] 介绍 使用方式 1.使用插件的方式 2.maven项目引入依赖的方式 3.pmd 命令行的方式 4.Java API的方式 * 项目结构 测试代码 pmdArgs方 ...

  2. java中事务实例,Java Spring 事务管理器入门例子教程(TranscationManager)

    注:阅读本文之前请务必有上文的基础 本文我们使用的事务管理器(TranscationManager)的作用是保证一组数据库操作的原子性.保证在操作时,如果出现异常,事务管理器会将状态恢复到进行本组操作 ...

  3. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  4. Java入门基础教程第一篇

    Java入门基础 Java是是一门面向对象编程语言,现在广泛使用,名声和c/c++.python一样,虽然我最常用的语言是python,但现在现在闲来无事,就写了这篇文章. 目录 Java入门基础 下 ...

  5. java入门基础教程(纯干货知识点+视频资源)

    本套Java视频教程是黑马程序员冯老师精心录制的Java基础班视频,该视频专门针对零基础的学员录制,授课讲究通俗易懂.干货.通过该套Java视频教程的学习,相信你能够轻轻松松地入门java语言. 完整 ...

  6. java入门学习教程,详细说明

    武汉Java编程入门怎么学?希望会对你的学习有所促进和帮助,让大家的Java编程入门.一.Java编程零基础可以学,但自学的确阻力有些大.作为一门技术语言,它所蕴含 接下来就要学习的是Java的面向对 ...

  7. java编程官方教程_Java编程入门官方教程

    图书特色:关键技能与概念:每章开头列出要介绍的技能和概念 专家解答:以问答形式提供附加信息和实用提示 编程练习:示范如何运用编程技能的紧贴实用的练习 自测题:每章后有一些测试题,以帮助读者扎实掌握Ja ...

  8. java编程入门pdf_Java 8编程入门官方教程(第6版) [(美)Schildt H.] 中文完整pdf扫描版[233MB]...

    Java8编程入门官方教程(第6版)针对新版JavaSE8对内容进行了全面更新.在畅销书作者Herbert Schildt(施密特)的帮助下,可以即刻开始学习Java程序设计的基础知识.<Jav ...

  9. BlackBerry手机Java开发开发工具下载/签名申请/入门中文教程

    本地下载 BlackBerry Java Plug-in for Eclipsev1.1 http://g.csdn.net/5147163 更多下载 http://blackberry.csdn.n ...

最新文章

  1. Android进程保活方案
  2. linux常用命令解析
  3. 【深度学习】19家机构联合发布,200页大模型Roadmap!
  4. wxWidgets:wxDateSpan类用法
  5. chrome 主进程cpu占用50%怎么办?
  6. c语言裂变,干货:社群是如何实现裂变的?
  7. 4245: KI的斐波那契 递归
  8. yii2 advanced版基础部分
  9. Kubernetes1.91(K8s)安装部署过程(六)--node节点部署
  10. c语言笛卡尔心形函数,笛卡尔心形函数故事
  11. 如何寻找“真爱”型合伙人
  12. 卡耐基梅隆大学计算机科学课本,美国卡耐基梅隆大学计算机科学硕士.pdf
  13. 2017.08.18【NOIP提高组】模拟赛B组 沙耶的玩偶(doll)
  14. 三大框架整合开发的时候,出现红色双箭头,advised by org.springframework.transaction.interceptor.TransactionInterceptor.in
  15. mysql 表基本操作(创建表、添加主键、外键、非空约束、唯一性约束、默认约束、自动增加)
  16. java 图片识别 tess4j_图像文字识别(四):java调用tess4j识别图像文字
  17. 敏捷软件开发(2)--- 设计原则
  18. 抢鲜体验:Oracle 19C单实例数据库安装步骤详解
  19. 80GB医学影像数据集发布!OCTA-500公开下载
  20. 预告片下载网站_如何在预告片电影中添加预告片以获得真实的电影院体验

热门文章

  1. 用户管理后台管理项目总结
  2. 教你m4a怎么转换成mp3
  3. Centos yum和pip下载离线安装包
  4. python永久配置pip下载镜像源方法(window版本)
  5. 802.11ac linux驱动下载,下载的驱动程序Realtek 8811CU Wireless LAN 802.11ac USB NIC 1030.22.0405.2017...
  6. 802.11ac双频
  7. MBA都包括哪些课程?有哪些MBA专业书籍值得推荐?
  8. Maven系列学习(1)——安装以及本地仓库和仓库镜像的配置
  9. 用计算机弹音乐忘川彼岸,原神忘川彼岸琴谱 原神琴谱忘川彼岸怎么弹
  10. 马云收购士兰微_2019中国500强民企榜单出炉!阿里第一腾讯第二