java tapestry_java Tapestry4.1.2入门说明教程
简单介绍
不必关心链接!不必关心请求(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入门说明教程相关推荐
- PMD【 Java 代码检查工具】入门使用教程(超详细)
PMD[ Java 代码检查工具] 介绍 使用方式 1.使用插件的方式 2.maven项目引入依赖的方式 3.pmd 命令行的方式 4.Java API的方式 * 项目结构 测试代码 pmdArgs方 ...
- java中事务实例,Java Spring 事务管理器入门例子教程(TranscationManager)
注:阅读本文之前请务必有上文的基础 本文我们使用的事务管理器(TranscationManager)的作用是保证一组数据库操作的原子性.保证在操作时,如果出现异常,事务管理器会将状态恢复到进行本组操作 ...
- java中batch基础_详解Spring batch 入门学习教程(附源码)
详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...
- Java入门基础教程第一篇
Java入门基础 Java是是一门面向对象编程语言,现在广泛使用,名声和c/c++.python一样,虽然我最常用的语言是python,但现在现在闲来无事,就写了这篇文章. 目录 Java入门基础 下 ...
- java入门基础教程(纯干货知识点+视频资源)
本套Java视频教程是黑马程序员冯老师精心录制的Java基础班视频,该视频专门针对零基础的学员录制,授课讲究通俗易懂.干货.通过该套Java视频教程的学习,相信你能够轻轻松松地入门java语言. 完整 ...
- java入门学习教程,详细说明
武汉Java编程入门怎么学?希望会对你的学习有所促进和帮助,让大家的Java编程入门.一.Java编程零基础可以学,但自学的确阻力有些大.作为一门技术语言,它所蕴含 接下来就要学习的是Java的面向对 ...
- java编程官方教程_Java编程入门官方教程
图书特色:关键技能与概念:每章开头列出要介绍的技能和概念 专家解答:以问答形式提供附加信息和实用提示 编程练习:示范如何运用编程技能的紧贴实用的练习 自测题:每章后有一些测试题,以帮助读者扎实掌握Ja ...
- java编程入门pdf_Java 8编程入门官方教程(第6版) [(美)Schildt H.] 中文完整pdf扫描版[233MB]...
Java8编程入门官方教程(第6版)针对新版JavaSE8对内容进行了全面更新.在畅销书作者Herbert Schildt(施密特)的帮助下,可以即刻开始学习Java程序设计的基础知识.<Jav ...
- BlackBerry手机Java开发开发工具下载/签名申请/入门中文教程
本地下载 BlackBerry Java Plug-in for Eclipsev1.1 http://g.csdn.net/5147163 更多下载 http://blackberry.csdn.n ...
最新文章
- Android进程保活方案
- linux常用命令解析
- 【深度学习】19家机构联合发布,200页大模型Roadmap!
- wxWidgets:wxDateSpan类用法
- chrome 主进程cpu占用50%怎么办?
- c语言裂变,干货:社群是如何实现裂变的?
- 4245: KI的斐波那契 递归
- yii2 advanced版基础部分
- Kubernetes1.91(K8s)安装部署过程(六)--node节点部署
- c语言笛卡尔心形函数,笛卡尔心形函数故事
- 如何寻找“真爱”型合伙人
- 卡耐基梅隆大学计算机科学课本,美国卡耐基梅隆大学计算机科学硕士.pdf
- 2017.08.18【NOIP提高组】模拟赛B组 沙耶的玩偶(doll)
- 三大框架整合开发的时候,出现红色双箭头,advised by org.springframework.transaction.interceptor.TransactionInterceptor.in
- mysql 表基本操作(创建表、添加主键、外键、非空约束、唯一性约束、默认约束、自动增加)
- java 图片识别 tess4j_图像文字识别(四):java调用tess4j识别图像文字
- 敏捷软件开发(2)--- 设计原则
- 抢鲜体验:Oracle 19C单实例数据库安装步骤详解
- 80GB医学影像数据集发布!OCTA-500公开下载
- 预告片下载网站_如何在预告片电影中添加预告片以获得真实的电影院体验
热门文章
- 用户管理后台管理项目总结
- 教你m4a怎么转换成mp3
- Centos yum和pip下载离线安装包
- python永久配置pip下载镜像源方法(window版本)
- 802.11ac linux驱动下载,下载的驱动程序Realtek 8811CU Wireless LAN 802.11ac USB NIC 1030.22.0405.2017...
- 802.11ac双频
- MBA都包括哪些课程?有哪些MBA专业书籍值得推荐?
- Maven系列学习(1)——安装以及本地仓库和仓库镜像的配置
- 用计算机弹音乐忘川彼岸,原神忘川彼岸琴谱 原神琴谱忘川彼岸怎么弹
- 马云收购士兰微_2019中国500强民企榜单出炉!阿里第一腾讯第二