??xml version="1.0" encoding="utf-8" standalone="yes"?>
//使用了Borderq个直定义的lgQBorder.htmlQ?Border.jwcQ?Border.java)
<span jwcid="@Border">
<TABLE align=center border=0>
<TR>
<TD>q是嵌入面</TD>
</TR>
</TABLE>
<br/>
</span>
//Border.html
<html jwcid="@Shell" title="RenderBody Example">
<body jwcid="@Body">
<table width="100%" cellspacing="0" border="0">
<tr>
<td>在这里开?lt;/td>
</tr>
<tr>
<td>
<span jwcid="@RenderBody">Page content goes here.</span>
</td>
</tr>
<tr>
<td>在这里结?lt;/td>
</tr>
</table>
</body>
</html>
最后的l果?
<html jwcid="@Shell" title="RenderBody Example">
<body jwcid="@Body">
<table width="100%" cellspacing="0" border="0">
<tr>
<td>在这里开?lt;/td>
</tr>
<tr>
<td>
<TABLE align=center border=0>
<TR>
<TD>q是嵌入面</TD>
</TR>
</TABLE>
<br/>
</td>
</tr>
<tr>
<td>在这里结?lt;/td>
</tr>
</table>
</body>
</html>
面响应Ӟ创徏了一个链接。如果触发了链接ӞlgActionLink得到一个监听器Q通过调用Ҏ(gu)actionTriggered()Q?BR>
DirectLinklg
DirectLinklg涉及?/FONT>sessionQ与ExternalLinklg的区别有两个Q?BR> W一Q?DirectLink涉及sessionQ?/FONT>DirectLink拥有一?/FONT>booleancd?/FONT>stateful参数来选择stateful?/FONT>statelessQ该参数默认?/FONT>trueQ即stateful。?/FONT>ExternalLink却不涉及sessionQ?/FONT>ExternalLink仅仅?/FONT>statelessQ不能够选择?
W二Q非帔R要的是,DirectLink?/FONT>ExternalLink参数传递方式不一栗?/FONT>DirectLink通过listener监听Ҏ(gu)参数“扔”给下一个页面。?/FONT>ExternalLink通过在下一个页面实?/FONT>IExternalPage接口以及activateExternalPageҎ(gu)“接收”参数?/SPAN>
Z实现分页功能Q我们?/FONT>DirectLinklg实现。在下面的例?FONT color=#000000>Q每个页面我们只昄10条数据,那么HQL只从数据库中查询出10条数据。对于页面来_(d)需要实现“下一”(或“上一”)面跌{Q以及向我们的业务逻辑层方法传递分参敎ͼ卛_前页码,以及每页昄数据敎ͼ?BR>L(fng)对应?/FONT>HTML文g中相关代码:(x)
<span jwcid="@Conditional" condition="ognl:firstDisable">
<span jwcid="first">首页</span>
<span jwcid="previous">上一?/FONT></span>
</span>
W?<span jwcid="@Insert" value="ognl:pageNo" /> ?/FONT>
<span jwcid="@Conditional" condition="ognl:lastDisable">
<span jwcid="next">下一?/FONT></span>
<span jwcid="last">N</span>
</span>
?/FONT> <span jwcid="@Insert" value="ognl:total" /> ?/FONT>
?/SPAN>page文g中声明相关组Ӟ(x)
<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>
DirectLinklg表现Z?/SPAN>HTML<a>元素Q用来提供一?/SPAN>URLQ当用户点击Ӟ触发面中一个特定的监听Ҏ(gu)?BR> 在实现分页面蟩转的四个lg里,都声明ؓ(f)同一?/SPAN>listener监听Ҏ(gu)。请看相?/SPAN>java中的对应监听Ҏ(gu)changePage的代码:(x)
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);
//获取每页最大显C数?nbsp;
Integer ig2 = (Integer) parameters[1];
int i2 = ig2.intValue();
setMaxResult(i2);
}
对于DirectLinkQparameters参数的赋值方式于ExternalLink一栗这里获取的是一个数l,q个数组包含了两样信息:(x)卛_跌{的页码数Q以及即蟩转的面昄多少条数据?BR> 在前面,我们提到q,面的java文g在完成页面表现所需数据的处理后Q应该将其所有成员变量(面propertyQ还原ؓ(f)初始倹{所以,“当前页码”以及“每|大显C数据”这两个数据Q我们将它们“保存”在面上。当点击触发监听Ҏ(gu)后,再由面来提供下一个页面的“页码”和“每|大显C数目”。然后再查询新的maxResult条数据?
q行效果囑֦下:(x)
ExternalLinklg
ExternalLinklg使用的是Tapestry?/FONT>9U?/FONT>service中的external service。该lg使用External Service 创徏l承?/FONT>IExternalPage接口的一个链接。下面用一个例子说明它的用法?BR><a jwcid="@ExternalLink" page="SuccessPage" parameters='ognl:new java.lang.Object[]{"This is Success Page!", item.id}'disabled="ognl:item.Isable"></a>
page="SuccessPage"q个参数的作用,是指定了将要蟩转的面名称Q?/FONT>ExternalLinklg?/FONT>page参数Ҏ(gu)配置文gtapestry.application文g中的配置扑ֈ对应?/FONT>page文gQ?
<page name="SuccessPage" specification-path="/WEBINF/SuccessPage.page"/>
然后?/FONT>SuccessPage.page文g中,Ҏ(gu)Q?
<page-specification class="com.ce.tapestry.Success">
扑ֈ对应?/FONT>Success.java文g。在Success.java文g中,我们发现该类l承?/FONT>IExternalPage接口Q?BR>public abstract class Success implements IExternalPage
以及实现?/FONT>activateExternalPage(Object[]Q?/FONT>IRequestCycle)Ҏ(gu)?
对于ExternalLinklgQ它必须l承IExternalPage接口Qƈ实现public void activateExternalPage(Object[] parameters,IRequestCycle cycle)Ҏ(gu)。该Ҏ(gu)的参?/FONT>Object[]来自该组件的parameters参数的倹{?disabled参数默认?/FONT>falseQ当?/FONT>trueӞ不能被“点几Z?BR>
GenericLinklg
lgGenericLink通常用于跌{到应用程序范围以外的链接?/FONT> 虽然GenericLink可以用其他组件也能完成,但是GenericLink更灵z:(x)它可以设|ؓ(f)disabledQ象DirectLink或?/FONT>ActionLink一样也能包?/FONT>Rolloverlg?BR>使用Ҏ(gu)如下Q?BR><a jwcid="@GenericLink" href="ognl:item.homepage" disabled="false"/>
Href参数Q其作用很明显,是提供一个链接地址。从上例可知Q从item.homepage取出地址?BR>disabled参数Q该参数默认?/FONT>falseQ当?/FONT>trueӞ不能被“点几Z。关?/FONT>disabled参数Q所?/FONT>linkcȝ仉有,作用均相同?
PageLinklg
PageLinklg非常单,只需要在page参数中指明需要蟩转到下一个页面的名字。相当于不带参数?/FONT>ExternalLink。不q需要注意的是,PageLink?/FONT>ExternalLink使用的不是同一?/FONT>serviceQ?/FONT>该组件用了Page Service创徏了另外一个链?/FONT>URL?/FONT>
使用Ҏ(gu)误例子Q?BR><a jwcid="@PageLink" page="Infos"><img src="images/lyb.gif" width="50" height="18" border="0">
</a>
跌{C下的URLQ?/FONT>http://localhost:8080/hello/helloworld?service=page/Upload
ServiceLinklg
创徏L不带有参数的引擎服务Q?/FONT>ServiceLinklg用法?/FONT>ActionLinkQ?/FONT>PageLink?/FONT>DirectLink{组件相|但常怸具体的应用服务一起用?/FONT>Service参数是要调用?/FONT>EngineService对象的名U。(BodyQ?/FONT>
以上?/FONT>LinkcȝӞ都需要在Bodylg范围内用?/FONT>