Tapestry 5.1教程:Tapestry的页面

开发 后端
本文是Tapestry教程的入门篇,讲述Tapestry 5.1中的起始页面配置,页面的跳转,以及页面的表达式。

1、Tapestry 5.1的Start.tml和Start.java

Tapestry不需要在Web.xml中配置welcome页面,也是使用约定大于配置的方式,默认的起始页面就是在pages目录下的Start。Tapestry中的页面由两部分组成:一个Java类和一个相同名字的模板文件(类似于jsp,Tapestry中的后缀名为:tml)。其中Java类是必须的,就算是没有任何代码,也必须要生成一个空类。tml模板在大多数情况下也是需要的,少数情况比如返回二进制流的话,可以不需要。

tml模板文件可以放在webroot目录下,也可以和Java类一直放在src目录下。

2、Tapestry 5.1中页面的跳转(可以用于指定跳转页面的东西:) @InjectPage

在Tapestry中,页面的跳转和Struts之类的框架是不同的,Struts的做法是Action返回一个字符串,Struts在xml配置文件中进行搜索匹配,决定跳转的页面。而Tapestry没有类似的配置文件,它的做法是在当前页中引用跳转页面。比如:想从Start跳转到Register页面的话,需要在Start中注入Register页面。示例代码如下:

  1. Class Start{  
  2.         @InjectPage 
  3.         private Register register;  
  4.  
  5.         Object onSubmit() {  
  6.                 return register;  
  7.         }  
  8. }  
  9.  

其中值得注意的是:onSubmit的修饰符并不是常见的public,而是缺省级别(或者说是package级别),这是Tapestry推荐的做法。***,比public级别低,这样的话,页面类的事件处理函数没有被公开,不是其他所有的人都能随便调用。第二,比private级别高,这样如果测试需要的话,可以把测试类放在同一个package里,方便测试的进行。

在Tapestry的事件处理函数中可以有6种方式指定跳转的页面

a、什么也不返回,也就是返回类型是void,这样的话,页面不跳转,只是刷新当前页面

b、字符串。Tapestry会查找与该字符串对应的类

c、类。一般来说是一个Page类,这种方式比返回类名(字符串)要好,因为这样的话,在类重命名后,程序不会出错。

d、Page实例,

e、Link,

f、流(Stream),比如返回pdf或者Excel文件。

3、Tapstry 5.1页面中的表达式

类似于jsp中< %= 变量名%>这样的写法,Tapestry的语法是${变量名},其中变量名是需要在页面对应的Java类中有get方法的。

4. Tapestry 5.1中页面相关的其他注意事项

◆在Tapestry中,页面称之为页面模板(Page Template)。Tapestry的页面模板必须是一个Well Formed Xml,需要引入Tapestry的Xml命名空间才能使用Tapestry的组件。示例:

  1. < html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"> 

◆在页面模板中可以使用表达式来获取变量的值。这种表达式在Tapestry中称之为:Expansion。

◆在前一篇文章中已经说过,一个页面模板必须有一个对应的Java类。在Tapestry中最基本的Expansion就是一个Java类的属性。比如:${userName}这就是一个在可以在页面模板中使用的Expansion,为了正确的显示用户名,必须在Java类中有一个对应的public String getUserName()这样一个方法。注意:是一个getter方法,而不必需是public String userName,实际上,如果没有userName这个属性,而只有getUserName这个方法,应用将能正确运行。

◆Expansion是不区分大小写的,也就是说${userName}和${UserName}是等价的。

◆使用Expansion,我们不仅可以显示Java类的属性,而且可以显示该属性的属性,比如Java类有一个日期型属性public Date getBirthday();那么,在页面模板中就可以这样使用:${birthday.time},相当于调用getBirthday().getTime()

◆也可以显示地调用非getter方法:比如:${birthday.hashCode()},Tapestry5.1开始,可以将属性作为函数调用的参数了。

◆可以使用?.来调用方法:比如:${birthday?.time},这样即使birthday是null,页面也不会报错。

◆Tapestry的Expansion是会编译时生成class文件的,而不是在运行时使用反射来取值的。Tapestry的作者认为这是Tapestry性能优于Struts2的可能(注意:Howard Lewis Ship也只是猜测)原因之一。

◆Tapestry的Expansion使用的几个说明:

        a、Expansion旁边的空白是会被忽略的

        b、整数和小数前面可以使用负号

        c、常数都是使用十进制的。

        d、字符串需要使用单引号

        e、可以使用..来表示一个范围,比如:1..5,表示1到5

【编辑推荐】

  1. Tapestry 5.1教程:web.xml的配置
  2. 学习Tapestry的十个关键点
  3. Tapestry函数执行顺序浅析
  4. Tapestry 5输入验证的实现方法
  5. JSP开发框架JSF对比基于Servlet的Tapestry
责任编辑:yangsai 来源: BlogJava
相关推荐

2009-07-14 14:08:35

Tapestry 5.web.xml的配置

2009-05-13 10:02:37

Tapestry 5.servletApache

2009-06-22 14:22:41

JSF和Tapestr

2009-06-24 16:16:30

JSF和Tapestr

2009-07-03 16:33:13

Tapestry函数执

2009-07-03 14:41:29

2009-06-29 18:04:13

Tapestry5

2009-06-29 17:42:03

Tapestry5新特

2009-07-03 17:09:01

学习Tapestry

2009-07-03 14:28:03

Tapestry 5组

2009-06-23 14:01:27

StrutsTapestryJSF

2009-07-03 14:46:42

JSP开发框架JSFTapestry

2011-12-27 09:25:29

ApacheJava

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2011-08-23 16:48:41

Lua 5.1API 函数

2010-05-21 09:31:09

安装VNC

2011-09-08 13:11:14

框架

2012-04-19 16:41:24

Titanium视频实现页面跳转

2012-03-26 21:49:44

iOS

2015-02-10 11:15:46

Android 5.1Google
点赞
收藏

51CTO技术栈公众号