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组件开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值