java Tapestry4.1.2入门说明教程第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中添加:


代码如下:

<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/2页 12下一页阅读全文

(0)

相关推荐

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

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

  • 二十分钟 教你Ruby快速入门 图文教程第1/4页

    突然发现,ruby也不错,我有点打算想学下了介绍 这是一个短小的Ruby入门,完全读完只需20分钟.这里假设读者已经安装了Ruby,如果你没有安装的话,请在阅读文前访问Ruby官方网站进行下载并安装. 交互式的Ruby 打开IRB(交互式Ruby外壳): 如果你使用Mac OS X,那么请打开终端窗口输入irb: 如果你使用Linux,那么请打开shell输入irb: 如果你使用windows,那么请在开始菜单中找到Ruby->fxri,并执行它. Ok,在打开IRB之后,在其中输入"He

  • Pear DB 新手入门指南教程第1/3页

    1. 简介这是一部指导我们如何使用Pear DB扩展.Pear DB,提供这样一系列的类: n 数据库抽象 n 高级错误处理机制 n 以及其它 2. 下载.安装Pear 由于现在Pear项目仍处于紧锣密鼓的开发之中,所以得到它的最好办法就是从CVS获得(Pear DB发行包已经跟随PHP4.0.6以后版本捆绑发布).所以,我们只需要把Pear的根目录放到php.ini配置文件include_path中.也可以通过这样设置:_set('include_path', '/pear_base_dir'

  • Java的JNI快速入门教程(推荐)

    1. JNI简介 JNI是Java Native Interface的英文缩写,意为Java本地接口. 问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时性要求高的地方目前还未涉及,实时性这类话题有待考究). 解决办法:Java使用JNI可以调用现有的本地库(C/C++开发任何和系统相关的程序和类库),极大地灵活Java的开发. 2. JNI快速学习教程 2.1 问题: 使用JNI写一段代码,实现string_Java_Test_helloworld

  • Java Mybatis框架入门基础教程

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个

  • Java持久层框架Mybatis入门详细教程

    mybatis介绍 mybatis它是轻量级持久层框架,由ibatis演化而来.它自动连接数据库,将数据库的结果集封装到对象中POJO. POJO: 一个简单的Java类,这个类没有实现/继承任何特殊的java接口或者类,不遵循任何主要java模型,约定或者框架的java对象.在理想情况下,POJO不应该有注解. JavaBean: JavaBean是可序列化的,实现了serializable接口 具有一个无参构造器 有按照命名规范的set和gett,is(可以用于访问布尔类型的属性)方法 My

  • mybatis框架入门学习教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 1.创建工程,导入jar包 创建一个java工程或者web工程都可以,然后导入mybatis的jar包和依赖包还有数据库的jar包,本人使用Oracle10g数据库

  • Ajax入门学习教程(一)

    1 什么是AJAX AJAX(Asynchronous JavaScript And XML)翻译成中文就是"异步Javascript和XML".即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML). AJAX还有一个最大的特点就是,当服务器响应时,不用刷新整个浏览器页面,而是可以局部刷新.这一特点给用户的感受是在不知不觉中完成请求和响应过程. 与服务器异步交互: 浏览器页面局部刷新: 2. 同步交互与异步交互 同步交互:客户端发出一个

  • Java Ehcache缓存框架入门级使用实例

    前言 JAVA缓存实现方案有很多,最基本的自己使用Map去构建缓存,或者使用memcached或Redis,但是上述两种缓存框架都要搭建服务器,而Map自行构建的缓存可能没有很高的使用效率,那么我们可以尝试一下使用Ehcache缓存框架. Ehcache主要基于内存缓存,磁盘缓存为辅的,使用起来方便.下面介绍如何在项目中使用Ehcache 入门使用教程 1.maven引用 <dependency> <groupId>net.sf.ehcache</groupId> &l

  • MyBatis入门学习教程(一)-MyBatis快速入门

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO) 首先给大家介绍MyBatis的含义

随机推荐