java Tapestry4.1.2入门说明教程第1/2页
程序员文章站
2023-11-25 10:09:16
简单介绍 不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!tapestry构建于底层的request-...
简单介绍
不必关心链接!不必关心请求(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中添加:
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.apache.tapestry.applicationservlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>
这是tapestry的*控制器。tapestry页面的显示,所有的请求,都会被发送到这个servlet上。
实例1:最简单的tapestry程序
在webroot下添加home.html
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
</body>
</html>
并访问网址:
http://localhost:8088/[context path]/app
结果页面显示home.html里面的内容。
这是因为tapestry总是会包含一个名字叫”home”的页面,默认情况下就是根路径下的home.html
实例2:添加简单的动态内容
home.html改为:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"> </span>
</body>
</html>
重新访问网址:http://localhost:8088/[context path]/app
在这个页面上,用到了tapestry的insert组件(component)。它带一个参数,通过一个ognl表达式来传递。
在应用服务器的启动参数中添加:-dorg.apache.tapestry.disable-caching=true,可以避免每次修改页面模板的时候重启服务器。
jwc = java web component
实例3:创建链接,指向某个页面
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"></span>
<p>
<a href="#" jwcid="@pagelink" page="home">刷新</a>
</body>
</html>
这次,通过一个pagelink组件,指向home页面,pagelink组件会自动产生指向home页面的链接(我们不必关心这个链接!)。
实例4:简单的计数器
直到现在为止,我们还没有涉及到java类,但是已经让tapestry成功运行起来了!该是写点java代码的时候了。我们想要创建一个计数器,每当用户点击“计数器增1”的时候,我们将这个计数器加1,然后在页面上显示出这个结果。
在传统的请求-响应模式中,我们针对这个问题,需要考虑的是:递交一个请求,创建相应的action来接收这个请求,并维护计数器的值,然后决定成功转向的页面,将结果显示在页面上。
在tapestry中,我们需要考虑的是:在哪个页面处理这个事件,结果如何显示在页面上?
下面是home.html
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"></span>
<p>
<a href="#" jwcid="@pagelink" page="home">刷新</a>
<p>
计数器当前的值是:<span jwcid="@insert" value="ognl:counter"></span>
<a href="#" jwcid="@directlink" listener="listener:doclick">计数器增1</a>
</body>
</html>
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
<?xml version="1.0"?>
<!doctype application public
"-//apache software foundation//tapestry specification 4.0//en"
"http://tapestry.apache.org/dtd/tapestry_4_0.dtd">
<application>
<meta key="org.apache.tapestry.page-class-packages" value="com.bjsxt.crm.web.tapestry.test"/>
</application>
配置的主要目的是让tapestry了解如何关联页面和页面类。
实例5:带一个参数的计数器
home.html改为:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"></span>
<p>
<a href="#" jwcid="@pagelink" page="home">刷新</a>
<p>
计数器当前的值是:<span jwcid="@insert" value="ognl:counter"></span>
<a href="#" jwcid="@directlink" listener="listener:doclick" parameters="ognl:1">计数器增1</a> <br>
<a href="#" jwcid="@directlink" listener="listener:doclick" parameters="ognl:5">计数器增5</a> <br>
<a href="#" jwcid="@directlink" listener="listener:doclick" parameters="ognl:10">计数器增10</a> <br>
<a href="#" jwcid="@directlink" listener="listener:clearcounter">清空计数器</a>
</body>
</html>
不必关心链接!不必关心请求(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中添加:
复制代码 代码如下:
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.apache.tapestry.applicationservlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>
这是tapestry的*控制器。tapestry页面的显示,所有的请求,都会被发送到这个servlet上。
实例1:最简单的tapestry程序
在webroot下添加home.html
复制代码 代码如下:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
</body>
</html>
并访问网址:
http://localhost:8088/[context path]/app
结果页面显示home.html里面的内容。
这是因为tapestry总是会包含一个名字叫”home”的页面,默认情况下就是根路径下的home.html
实例2:添加简单的动态内容
home.html改为:
复制代码 代码如下:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"> </span>
</body>
</html>
重新访问网址:http://localhost:8088/[context path]/app
在这个页面上,用到了tapestry的insert组件(component)。它带一个参数,通过一个ognl表达式来传递。
在应用服务器的启动参数中添加:-dorg.apache.tapestry.disable-caching=true,可以避免每次修改页面模板的时候重启服务器。
jwc = java web component
实例3:创建链接,指向某个页面
复制代码 代码如下:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"></span>
<p>
<a href="#" jwcid="@pagelink" page="home">刷新</a>
</body>
</html>
这次,通过一个pagelink组件,指向home页面,pagelink组件会自动产生指向home页面的链接(我们不必关心这个链接!)。
实例4:简单的计数器
直到现在为止,我们还没有涉及到java类,但是已经让tapestry成功运行起来了!该是写点java代码的时候了。我们想要创建一个计数器,每当用户点击“计数器增1”的时候,我们将这个计数器加1,然后在页面上显示出这个结果。
在传统的请求-响应模式中,我们针对这个问题,需要考虑的是:递交一个请求,创建相应的action来接收这个请求,并维护计数器的值,然后决定成功转向的页面,将结果显示在页面上。
在tapestry中,我们需要考虑的是:在哪个页面处理这个事件,结果如何显示在页面上?
下面是home.html
复制代码 代码如下:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"></span>
<p>
<a href="#" jwcid="@pagelink" page="home">刷新</a>
<p>
计数器当前的值是:<span jwcid="@insert" value="ognl:counter"></span>
<a href="#" jwcid="@directlink" listener="listener:doclick">计数器增1</a>
</body>
</html>
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
复制代码 代码如下:
<?xml version="1.0"?>
<!doctype application public
"-//apache software foundation//tapestry specification 4.0//en"
"http://tapestry.apache.org/dtd/tapestry_4_0.dtd">
<application>
<meta key="org.apache.tapestry.page-class-packages" value="com.bjsxt.crm.web.tapestry.test"/>
</application>
配置的主要目的是让tapestry了解如何关联页面和页面类。
实例5:带一个参数的计数器
home.html改为:
复制代码 代码如下:
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb18030">
<title>insert title here</title>
</head>
<body>
第一个tapestry程序
现在时间是:<span jwcid="@insert" value="ognl:new java.util.date()"></span>
<p>
<a href="#" jwcid="@pagelink" page="home">刷新</a>
<p>
计数器当前的值是:<span jwcid="@insert" value="ognl:counter"></span>
<a href="#" jwcid="@directlink" listener="listener:doclick" parameters="ognl:1">计数器增1</a> <br>
<a href="#" jwcid="@directlink" listener="listener:doclick" parameters="ognl:5">计数器增5</a> <br>
<a href="#" jwcid="@directlink" listener="listener:doclick" parameters="ognl:10">计数器增10</a> <br>
<a href="#" jwcid="@directlink" listener="listener:clearcounter">清空计数器</a>
</body>
</html>
1
上一篇: c++代码示例(程序编程代码大全)