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 閱讀(1242) 評論(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
          寫的不錯。  回復  更多評論
            
          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 卢湾区| 汾西县| 和林格尔县| 巴林左旗| 慈溪市| 阿合奇县| 乃东县| 昭苏县| 恩施市| 南郑县| 砀山县| 桃江县| 新民市| 商城县| 惠来县| 宣汉县| 吐鲁番市| 安溪县| 孟州市| 马关县| 瓮安县| 德阳市| 贺州市| 苏尼特右旗| 休宁县| 海盐县| 囊谦县| 娄底市| 陆良县| 张北县| 达孜县| 永嘉县| 仁化县| 治多县| 固镇县| 山丹县| 通州区| 通化县| 宁安市| 南靖县| 扎兰屯市|