posts - 2,  comments - 2,  trackbacks - 0

ActionLink组件

页面响应时,创建了一个链接。如果触发了链接时,组件ActionLink得到一个监听器(通过调用方法actionTriggered())。

DirectLink组件

DirectLink组件涉及到session,与ExternalLink组件的区别有两个:
 
第一: DirectLink涉及sessionDirectLink拥有一个boolean类型的stateful参数来选择statefulstateless,该参数默认为true,即stateful。而ExternalLink却不涉及sessionExternalLink仅仅是stateless,不能够选择。
 
第二:非常重要的是,DirectLinkExternalLink参数传递方式不一样。DirectLink通过listener监听方法将参数“扔”给下一个页面。而ExternalLink通过在下一个页面实现IExternalPage接口以及activateExternalPage方法“接收”参数。 
  为了实现分页功能,我们使用DirectLink组件实现。在下面的例子,每个页面我们只显示10条数据,那么HQL就只从数据库中查询出10条数据。对于页面来说,就需要实现“下一页”(或“上一页”)页面跳转,以及向我们的业务逻辑层方法传递分页参数(即当前页码,以及每页显示数据数)。
请看对应的
HTML文件中相关代码: 
   <span jwcid="@Conditional" condition="ognl:firstDisable"> 
         <span jwcid="first">首页</span> 
         <span jwcid="previous">上一页</span> 
   
</span> 
   
<span jwcid="@Insert" value="ognl:pageNo" />  
   
<span jwcid="@Conditional" condition="ognl:lastDisable"> 
         <span jwcid="next">下一页</span> 
         <span jwcid="last">尾页</span> 
   </span> 
 共 <span jwcid="@Insert" value="ognl:total" />
page文件中声明相关组件: 
  
<component id="first" type="DirectLink"> 
   <binding name="listener" expression="listeners.changePage"/> 
   <binding name="parameters" expression="new java.lang.Object[]{first,maxResult}"/> 
 </component>
 <component id="previous" type="DirectLink"> 
   <binding name="listener" expression="listeners.changePage"/> 
   <binding name="parameters" expression="new java.lang.Object[]{previous, maxResult}"/>
   <binding name="disabled" expression="previousDisable"/>
 </component>
 <component id="next" type="DirectLink"> 
   <binding name="listener" expression="listeners.changePage"/> 
   <binding name="parameters" expression="new java.lang.Object[]{next, maxResult}"/> 
   <binding name="disabled" expression="nextDisable"/>
 </component>
 <component id="last" type="DirectLink"> 
   <binding name="listener" expression="listeners.changePage"/> 
   <binding name="parameters" expression="new java.lang.Object[]{last,maxResult}"/>
 </component>
  DirectLink组件表现为一个HTML<a>元素,用来提供一个URL,当用户点击时,触发页面中一个特定的监听方法。
  在实现分页页面跳转的四个组件里,都声明为同一个listener监听方法。请看相应java中的对应监听方法changePage的代码:
public void changePage(IRequestCycle cycle) { 
   //Tapestry4.0已经deprecated了cycle.getListenerParameters()
   Object[] parameters = cycle.getServiceParameters(); 
   //获取当前页码 
   Integer ig1 = (Integer) parameters[0]; 
   int i1 = ig1.intValue(); 
   setPageNo(i1); 
   //获取每页最大显示数目 
   Integer ig2 = (Integer) parameters[1]; 
   int i2 = ig2.intValue(); 
   setMaxResult(i2);
}
  对于DirectLink,parameters参数的赋值方式于ExternalLink一样。这里获取的是一个数组,这个数组包含了两样信息:即将跳转的页码数,以及即将跳转的页面显示多少条数据。
 
在前面,我们提到过,页面的java文件在完成页面表现所需数据的处理后,应该将其所有成员变量(页面property)还原为初始值。所以,“当前页码”以及“每页最大显示数据”这两个数据,我们将它们“保存”在页面上。当点击触发监听方法后,再由页面来提供下一个页面的“页码”和“每页最大显示数目”。然后再查询新的maxResult条数据。
 
运行效果图如下:


ExternalLink组件

ExternalLink组件使用的是Tapestry9service中的external service。该组件使用External Service 创建继承了IExternalPage接口的一个链接。下面用一个例子说明它的用法。
<a jwcid="@ExternalLink" page="SuccessPage" parameters='ognl:new java.lang.Object[]{"This is Success Page!", item.id}'disabled="ognl:item.Isable"></a>
page="SuccessPage"这个参数的作用,就是指定了将要跳转的页面名称,ExternalLink组件的page参数根据配置文件tapestry.application文件中的配置找到对应的page文件:
<page name="SuccessPage" specification-path="/WEBINF/SuccessPage.page"/>
然后在SuccessPage.page文件中,根据:
<page-specification class="com.ce.tapestry.Success">
找到对应的Success.java文件。在Success.java文件中,我们发现该类继承了IExternalPage接口:
public abstract class Success implements IExternalPage
以及实现了activateExternalPage(Object[]IRequestCycle)方法。
 
对于ExternalLink组件,它必须继承IExternalPage接口,并实现public void activateExternalPage(Object[] parameters,IRequestCycle cycle)方法。该方法的参数Object[]来自该组件的parameters参数的值。 disabled参数默认为false,当为true时,不能被“点击”。

GenericLink组件

组件GenericLink通常用于跳转到应用程序范围以外的链接 虽然GenericLink可以用其他组件也能完成,但是GenericLink更灵活:它可以设置为disabled,象DirectLink或者ActionLink一样也能包含Rollover组件
使用方法如下:
<a jwcid="@GenericLink" href="ognl:item.homepage" disabled="false"/>
Href参数:其作用很明显,就是提供一个链接地址。从上例可知:从item.homepage取出地址。
disabled参数:该参数默认为false,当为true时,不能被“点击”。关于disabled参数,所有link类组件都有,作用均相同。

PageLink组件

PageLink组件非常简单,只需要在page参数中指明需要跳转到下一个页面的名字。相当于不带参数的ExternalLink。不过需要注意的是,PageLinkExternalLink使用的不是同一个service该组件使用了Page Service创建了另外一个链接URL
使用方法请见例子:
<a jwcid="@PageLink" page="Infos"><img src="images/lyb.gif" width="50" height="18" border="0">
</a>
跳转到以下的URLhttp://localhost:8080/hello/helloworld?service=page/Upload

ServiceLink组件

创建任意不带有参数的引擎服务,ServiceLink组件用法与ActionLinkPageLinkDirectLink等组件相似,但常常与具体的应用服务一起使用。Service参数是要调用的EngineService对象的名称。(Body

以上的Link类组件,都需要在Body组件范围内使用。


posted on 2006-01-27 22:25 yyp 阅读(1225) 评论(2)  编辑  收藏 所属分类: Tapestry


FeedBack:
# re: 页面跳转类组件:ActionLink, DirectLink, ExternalLink, GenericLink, ServiceLink
2007-02-13 14:58 | ithink
不错好文章,正是我要看的:)  回复  更多评论
  
# re: 页面跳转类组件:ActionLink, DirectLink, ExternalLink, GenericLink, ServiceLink
2007-08-11 20:33 | dreamstone
写的不错。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2006年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜