Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185002
  • 博文数量: 6
  • 博客积分: 2001
  • 博客等级: 大尉
  • 技术积分: 450
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-07 13:24
文章分类
文章存档

2010年(2)

2008年(4)

我的朋友

分类: Java

2008-04-21 19:07:48

关键字: Link类组件
Tapestry总共有6种标准的link组件:
GenericLink, ActionLink, DirectLink,ServiceLink, ExternalLink和PageLink
*disabled参数 公有参数,disabled=true时,链接不可用

A) GenericLink 组件
e.g.
百度
用于跳转到应用程序范围以外的链接

B) ExternalLink 组件
e.g.

  日志名称

带参数的页面跳转,不涉及session,使用service=external
*parameters属性,用以传递数组类型的参数(Object[]{})
*page参数表示所要跳转到的页面类(LogDetails页面类)
使用ExternalLink时,所要跳转到的页面类必须继承IExternalPage接口,并实现一个方法.
Java代码 复制代码

   1. LogDetails.java  
   2. public abstract class LogDetails extends BasePage implements IExternalPage {  
   3.   
   4.   ......  
   5.   
   6. public void activateExternalPage(Object[] parameters,  IRequestCycle cycle){  
   7. this.setLogId((Integer) parameters[0]); //获取传递进来的参数并执行所需操作  
   8. }  
   9. }  

LogDetails.java
public abstract class LogDetails extends BasePage implements IExternalPage {

  ......

public void activateExternalPage(Object[] parameters,  IRequestCycle cycle){
this.setLogId((Integer) parameters[0]); //获取传递进来的参数并执行所需操作
}
}


IRequestCycle类型的参数cycle表示当前访问该页面的requestCycle

C) PageLink 组件
e.g.
个人设置
相当于不带参数的ExternalLink组件,不过使用的是service=page

D) DirectLink 组件
e.g.

  日志名称

Java代码 复制代码

   1. Log.java  
   2. public IPage logSelect(Integer id){  
   3. LogDetails logDetails = getLogDetails();  
   4. logDetails.setLogId(id);  
   5. return logDetails;  
   6. }  

Log.java
public IPage logSelect(Integer id){
LogDetails logDetails = getLogDetails();
logDetails.setLogId(id);
return logDetails;
}


DirectLink组件表现为一个HTML元素,用来提供一个URL,当用户点击时,触发页面中一个特定的监听方法.使用service=direct
涉及session,DirectLink拥有一个boolean类型的stateful参数来选择stateful或stateless,该参数默认为true,即stateful.
DirectLink通过listener监听方法将参数“扔”给下一个页面,这与ExternalLink的实现IExternalPage接口以及activateExternalPage方法接收参数不同.
关于DirectLink使用session的示例:

Java代码 复制代码

   1. Log.java  
   2. public IPage logSelect(IRequestCycle cycle){  
   3. IPage logDetails = cycle.getPage("LogDetails");  
   4. cycle.activate(logDetails);  
   5. }  

Log.java
public IPage logSelect(IRequestCycle cycle){
IPage logDetails = cycle.getPage("LogDetails");
cycle.activate(logDetails);
}


Java代码 复制代码

   1. LogDetails.java  
   2. public void beginResponse(IMarkupWriter writer, IRequestCycle cycle) {  
   3. Object[] logObj = cycle.getListenerParameters();  
   4. int logId = ((Integer)logObj[0]).intValue();  
   5. ...  
   6. }  

LogDetails.java
public void beginResponse(IMarkupWriter writer, IRequestCycle cycle) {
Object[] logObj = cycle.getListenerParameters();
int logId = ((Integer)logObj[0]).intValue();
...
}


先跳转到另一个页面,然后可以在该页面中获取传递过来的参数,因为参数随session传递过来了.

E) ActionLink 组件
e.g.
具体不了解,也么用过,听说这个组件在T5里面已经变了样了,以后再学习

F) ServiceLink 组件
e.g.
退出
听说ServiceLink组件可以使用Tapestry的9种服务,不过不知道如何使用,目前初入Tapestry,尚未涉及. 
阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~