关键字: Link类组件 Tapestry总共有6种标准的link组件: GenericLink, ActionLink, DirectLink,ServiceLink, ExternalLink和PageLink *disabled参数 公有参数,disabled=true时,链接不可用
A) GenericLink 组件 e.g. <a href="http://www.baidu.com" jwcid="@GenericLink">百度</a> 用于跳转到应用程序范围以外的链接
B) ExternalLink 组件 e.g. <a href="" jwcid="@ExternalLink" page="LogDetails" parameters="ognl:new java.lang.Object[]{ITem.id}"> <span jwcid="@Insert" value="ognl:ITem.name">日志名称</span> </a> 带参数的页面跳转,不涉及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. <a href="" jwcid="@PageLink" page="UserInfo">个人设置</a> 相当于不带参数的ExternalLink组件,不过使用的是service=page
D) DirectLink 组件 e.g. <a jwcid="@DirectLink" listener="listener:logSelect" parameters="ITem.id"> <span jwcid="@Insert" value="ognl:ITem.name">日志名称</span> </a> 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<a>元素,用来提供一个URL,当用户点击时,触发页面中一个特定的监听方法.使用service=direct 涉及session,DirectLink拥有一个boolean类型的stateful参数来选择stateful或stateless,该参数默认为true,即stateful. DirectLink通过listener监听方法将参数“扔”给下一个页面,这与ExternalLink的实现IExternalPage接口以及activateExternalPage方法接收参数不同. 关于DirectLink使用session的示例: <a jwcid="@DirectLink" listener="listener:logSelect" parameters="ognl:new java.lang.Object[]{ITem.id}"> 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. <a jwcid="@ServiceLink" service="lITeral:restart">退出</a> 听说ServiceLink组件可以使用Tapestry的9种服务,不过不知道如何使用,目前初入Tapestry,尚未涉及. |