™åµé¢å“应æ—Óž¼Œåˆ›å¾äº†ä¸€ä¸ªé“¾æŽ¥ã€‚如果触å‘了链接æ—Óž¼Œ¾l„äšgActionLink得到一个监å¬å™¨åQˆé€šè¿‡è°ƒç”¨æ–ÒŽ³•actionTriggered()åQ‰ã€?BR>
DirectLink¾l„äšg
DirectLink¾l„äšg涉åŠåˆ?/FONT>sessionåQŒä¸ŽExternalLink¾l„äšg的区别有两个åQ?BR> ½W¬ä¸€åQ?DirectLink涉åŠsessionåQ?/FONT>DirectLink拥有一ä¸?/FONT>boolean¾cÕdž‹çš?/FONT>stateful傿•°æ¥é€‰æ‹©statefulæˆ?/FONT>statelessåQŒè¯¥å‚数默认ä¸?/FONT>trueåQŒå³stateful。è€?/FONT>ExternalLinkå´ä¸æ¶‰åŠsessionåQ?/FONT>ExternalLinkä»…ä»…æ˜?/FONT>statelessåQŒä¸èƒ½å¤Ÿé€‰æ‹©ã€?
½W¬äºŒåQšéžå¸”R‡è¦çš„æ˜¯ï¼ŒDirectLinkä¸?/FONT>ExternalLink傿•°ä¼ 递方å¼ä¸ä¸€æ —÷€?/FONT>DirectLink通过listenerç›‘å¬æ–ÒŽ³•ž®†å‚数“扔â€ç»™ä¸‹ä¸€ä¸ªé¡µé¢ã€‚è€?/FONT>ExternalLink通过在下一个页é¢å®žçŽ?/FONT>IExternalPage接å£ä»¥åŠactivateExternalPageæ–ÒŽ³•“接收â€å‚æ•°ã€?/SPAN>
ä¸ÞZº†å®žçŽ°åˆ†é¡µåŠŸèƒ½åQŒæˆ‘们ä‹Éç”?/FONT>DirectLink¾l„äšg实现。在下é¢çš„例å?FONT color=#000000>åQŒæ¯ä¸ªé¡µé¢æˆ‘ä»¬åªæ˜„¡¤º10æ¡æ•°æ®ï¼Œé‚£ä¹ˆHQLž®±åªä»Žæ•°æ®åº“䏿Ÿ¥è¯¢å‡º10æ¡æ•°æ®ã€‚å¯¹äºŽé¡µé¢æ¥è¯ß_¼Œž®±éœ€è¦å®žçŽ°â€œä¸‹ä¸€™åµâ€ï¼ˆæˆ–“上一™åµâ€ï¼‰™åµé¢è·Œ™{åQŒä»¥åŠå‘æˆ‘ä»¬çš„ä¸šåŠ¡é€»è¾‘å±‚æ–¹æ³•ä¼ é€’åˆ†™åµå‚敎ͼˆå›_½“å‰é¡µç ï¼Œä»¥åŠæ¯é¡µæ˜„¡¤ºæ•°æ®æ•ŽÍ¼‰ã€?BR>è¯ïLœ‹å¯¹åº”çš?/FONT>HTMLæ–‡äšgä¸ç›¸å…³ä»£ç :
<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ä¸å£°æ˜Žç›¸å…³ç»„ä»Óž¼š
<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¾l„äšg表现ä¸ÞZ¸€ä¸?/SPAN>HTML<a>å…ƒç´ åQŒç”¨æ¥æä¾›ä¸€ä¸?/SPAN>URLåQŒå½“用户点击æ—Óž¼Œè§¦å‘™åµé¢ä¸ä¸€ä¸ªç‰¹å®šçš„ç›‘å¬æ–ÒŽ³•ã€?BR> 在实现分™åµé¡µé¢èŸ©è½¬çš„四个¾l„äšgé‡Œï¼Œéƒ½å£°æ˜ŽäØ“åŒä¸€ä¸?/SPAN>listenerç›‘å¬æ–ÒŽ³•。请看相åº?/SPAN>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);
//èŽ·å–æ¯é¡µæœ€å¤§æ˜¾½Cºæ•°ç›?nbsp;
Integer ig2 = (Integer) parameters[1];
int i2 = ig2.intValue();
setMaxResult(i2);
}
对于DirectLinkåQŒparameters傿•°çš„赋值方å¼äºŽExternalLinkä¸€æ —÷€‚这里获å–的是一个数¾l„,˜q™ä¸ªæ•°ç»„包å«äº†ä¸¤æ ·ä¿¡æ¯ï¼šå›_°†è·Œ™{çš„é¡µç æ•°åQŒä»¥åŠå³ž®†èŸ©è½¬çš„™åµé¢æ˜„¡¤ºå¤šå°‘æ¡æ•°æ®ã€?BR> 在å‰é¢ï¼Œæˆ‘们æåˆ°˜q‡ï¼Œ™åµé¢çš„javaæ–‡äšg在完æˆé¡µé¢è¡¨çŽ°æ‰€éœ€æ•°æ®çš„处ç†åŽåQŒåº”该将其所有æˆå‘˜å˜é‡ï¼ˆ™åµé¢propertyåQ‰è¿˜åŽŸäØ“åˆå§‹å€¹{€‚所以,“当å‰é¡µç â€ä»¥åŠâ€œæ¯™å‰|œ€å¤§æ˜¾½Cºæ•°æ®â€è¿™ä¸¤ä¸ªæ•°æ®åQŒæˆ‘们将它们“ä¿å˜â€åœ¨™åµé¢ä¸Šã€‚当点击触å‘ç›‘å¬æ–ÒŽ³•åŽï¼Œå†ç”±™åµé¢æ¥æä¾›ä¸‹ä¸€ä¸ªé¡µé¢çš„“页ç â€å’Œâ€œæ¯™å‰|œ€å¤§æ˜¾½Cºæ•°ç›®â€ã€‚ç„¶åŽå†æŸ¥è¯¢æ–°çš„maxResultæ¡æ•°æ®ã€?
˜q行效果囑֦‚下:
ExternalLink¾l„äšg
ExternalLink¾l„äšg使用的是Tapestryçš?/FONT>9¿U?/FONT>serviceä¸çš„external service。该¾l„äšg使用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>ExternalLink¾l„äšgçš?/FONT>page傿•°æ ÒŽ®é…置文äšgtapestry.applicationæ–‡äšgä¸çš„é…置扑ֈ°å¯¹åº”çš?/FONT>pageæ–‡äšgåQ?
<page name="SuccessPage" specification-path="/WEBINF/SuccessPage.page"/>
ç„¶åŽåœ?/FONT>SuccessPage.pageæ–‡äšgä¸ï¼Œæ ÒŽ®å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)æ–ÒŽ³•ã€?
对于ExternalLink¾l„äšgåQŒå®ƒå¿…é¡»¾l§æ‰¿IExternalPage接å£åQŒåƈ实现public void activateExternalPage(Object[] parameters,IRequestCycle cycle)æ–ÒŽ³•。该æ–ÒŽ³•çš„å‚æ•?/FONT>Object[]æ¥è‡ªè¯¥ç»„ä»¶çš„parameters傿•°çš„倹{€?disabled傿•°é»˜è®¤ä¸?/FONT>falseåQŒå½“ä¸?/FONT>trueæ—Óž¼Œä¸èƒ½è¢«â€œç‚¹å‡ Z€ã€?BR>
GenericLink¾l„äšg
¾l„äšgGenericLink通常用于跌™{到应用程åºèŒƒå›´ä»¥å¤–的链接ã€?/FONT> 虽然GenericLinkå¯ä»¥ç”¨å…¶ä»–组件也能完æˆï¼Œä½†æ˜¯GenericLink更絋z»ï¼šå®ƒå¯ä»¥è®¾¾|®äØ“disabledåQŒè±¡DirectLink或è€?/FONT>ActionLinkä¸€æ ·ä¹Ÿèƒ½åŒ…å?/FONT>Rollover¾l„äšgã€?BR>使用æ–ÒŽ³•如下åQ?BR><a jwcid="@GenericLink" href="ognl:item.homepage" disabled="false"/>
Href傿•°åQšå…¶ä½œç”¨å¾ˆæ˜Žæ˜¾ï¼Œž®±æ˜¯æä¾›ä¸€ä¸ªé“¾æŽ¥åœ°å€ã€‚从上例å¯çŸ¥åQšä»Žitem.homepageå–出地å€ã€?BR>disabled傿•°åQšè¯¥å‚数默认ä¸?/FONT>falseåQŒå½“ä¸?/FONT>trueæ—Óž¼Œä¸èƒ½è¢«â€œç‚¹å‡ Z€ã€‚å…³äº?/FONT>disabled傿•°åQŒæ‰€æœ?/FONT>link¾cÈ»„仉™ƒ½æœ‰ï¼Œä½œç”¨å‡ç›¸åŒã€?
PageLink¾l„äšg
PageLink¾l„äšgéžå¸¸½Ž€å•,åªéœ€è¦åœ¨page傿•°ä¸æŒ‡æ˜Žéœ€è¦èŸ©è½¬åˆ°ä¸‹ä¸€ä¸ªé¡µé¢çš„åå—。相当于ä¸å¸¦å‚æ•°çš?/FONT>ExternalLink。丘q‡éœ€è¦æ³¨æ„的是,PageLinkå’?/FONT>ExternalLinkä½¿ç”¨çš„ä¸æ˜¯åŒä¸€ä¸?/FONT>serviceåQ?/FONT>该组件ä‹É用了Page Service创å¾äº†å¦å¤–一个链æŽ?/FONT>URLã€?/FONT>
使用æ–ÒŽ³•误‚§ä¾‹ååQ?BR><a jwcid="@PageLink" page="Infos"><img src="images/lyb.gif" width="50" height="18" border="0">
</a>
è·Œ™{åˆîC»¥ä¸‹çš„URLåQ?/FONT>http://localhost:8080/hello/helloworld?service=page/Upload
ServiceLink¾l„äšg
创å¾ä»ÀL„ä¸å¸¦æœ‰å‚数的引擎æœåŠ¡åQ?/FONT>ServiceLink¾l„äšg用法ä¸?/FONT>ActionLinkåQ?/FONT>PageLinkå’?/FONT>DirectLink½{‰ç»„件相ä¼û|¼Œä½†å¸¸å¸æ€¸Žå…·ä½“的应用æœåŠ¡ä¸€èµ·ä‹É用ã€?/FONT>Service傿•°æ˜¯è¦è°ƒç”¨çš?/FONT>EngineService对象的å¿U°ã€‚(BodyåQ?/FONT>
以上çš?/FONT>Link¾cÈ»„ä»Óž¼Œéƒ½éœ€è¦åœ¨Body¾l„äšg范围内ä‹É用ã€?/FONT>