<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網(wǎng) 大學(xué)生計算機學(xué)習(xí)社區(qū)

    CowNew開源團隊

    http://www.cownew.com 郵件請聯(lián)系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
     批量系統(tǒng)原有的頁面定時刷新的實現(xiàn)是不太合理的,以RealtimeBatchRunningOfCountwf為例:
     首先在RealtimeBatchRunningOfCountwf.page中定義了屬性refreshUrl:<property-specification name="refreshUrl" type="java.lang.String"/>,RealtimeBatchRunningOfCountwf.html中將refreshUrl插入head部分。實現(xiàn)的重點在RealtimeBatchRunningOfCountwf.java中,getRefreshUrl方法返回httpmeta頭,在這個頭信息中定義了刷新時間和要刷新到的頁面的url:
     public String getRefreshUrl() {
      String t_intervalTime = getIntervalTime();
      if (t_intervalTime == null) {
       t_intervalTime = getRequestCycle().getRequestContext()
       .getParameter("intervalTime");
      }
      if (t_intervalTime == null || t_intervalTime.equals("")) {
       return "";
      }
      String url = "";
      
      try{
       url = "<meta http-equiv=\"Refresh\" content=\""
        + t_intervalTime
        + "; URL="
        + getRequestCycle().getRequestContext().getAbsoluteURL(
        "batch-server/app?service=page/RealtimeBatchCountwf")
        + "&gappid=" + getGappid() + "&gfuncid=" + getGfuncid() + "&intervalTime=" + t_intervalTime
        + "&agentzoneno=" + getAgentzoneno()
        + "\"/>";
      } catch(Exception e){
       setMessage(e.getMessage());
       return "";
      }
      return url;
     }
     可以看到getRefreshUrl的實現(xiàn)是非常復(fù)雜的,由于TapeStry的頁面模型是比較復(fù)雜的,其中的變量都是通過頁面模型來儲存的,如果只是簡單的刷新頁面,會造成這些頁面變量錯誤,因此在getRefreshUrl方法中將所有的變量拼接到url中,這樣在頁面的getGappid、getAgentzoneno等方法中首先判斷頁面請求(getRequestContext)中是否有此頁面變量,如果有則取頁面請求中的,否則再去取本對象中的變量值。這樣看起來getGappid、getAgentzoneno、getRefreshUrl等方法都非常復(fù)雜,一旦頁面中增加新的屬性就需要去修改getRefreshUrl方法,而且這樣造成視圖(View)的邏輯混雜到了模型(Model)中,違反了MVC的隔離原則,最重要的是這樣做違背了Tapestry頁面模型設(shè)計的原意。因此我做了一個新的實現(xiàn)方法,可以參考BatchTaskContrlwf:
     首先仍然是在BatchTaskContrlwf.java中定義getIntervalTime方法:
     public String getIntervalTime()
     {
      if (intervalTime == null)
      {
       intervalTime = "60";
      }
      setMessage("數(shù)據(jù)每 " + intervalTime + " 秒更新一次,更新的速度可以在左上角更改");
      return intervalTime;
     }
     getIntervalTime比以前的實現(xiàn)簡單了。BatchTaskContrlwf.java中也沒有了getRefreshUrl方法,這樣保持了視圖與模型的獨立性。
     在BatchTaskContrlwf.html中body的開頭增加如下的javascript:
    <script>
     //intervalTime表示秒,但是在setTimeout中的單位是毫秒,所以在后邊加三個零
     window.setTimeout("RefreshPage()",<span jwcid="@InsertText" value="ognl:intervalTime"></span>000);
     function RefreshPage()
     {  
      document.getElementById("imgRefresh").click();
     }
    </script>
     這里調(diào)用定時器實現(xiàn)每隔intervalTime秒就調(diào)用一次RefreshPage方法,在RefreshPage方法中則去模擬點擊imgRefresh控件,這樣就可以達到刷新頁面的目的了。imgRefresh是為“刷新”這個圖形按鈕增加的id屬性,因為圖形按鈕默認是只有name屬性的,而且name屬性生成的也是隨機的,所以為“刷新”按鈕增加id屬性:
    <img jwcid="@ImageSubmit" id="imgRefresh" hspace="20" align="middle" image="ognl:assets.refreshImage" listener="ognl:listeners.refreshAction"/>
     這樣就可以在RefreshPage方法中輕松的取得此控件了。
     在RefreshPage方法中也使用getElementById這個技巧,因為Tapestry生成的html中的表單的名稱也是不可測的,目前的名稱是“$Form0”,但是這個名稱是不保障的,如果我們在RefreshPage方法中使用document.$Form0.$ImageSubmit.click()方式刷新頁面的話,很有可能在Tapestr實現(xiàn)機制改變或者在頁面中加入了新的表單元素后造成代碼錯誤。而getElementById則可以直接根據(jù)控件id來定位控件,大大提高了代碼的靈活性。
    注:上邊的文章是我對公司原有產(chǎn)品進行重構(gòu)的時候發(fā)的一篇文章,涉及到了公司的一些私有概念,非公司的人可能讀部分章節(jié)起來有點費勁,請諒解。如果以后有時間我會整理成通用的文檔的。
    posted on 2007-06-05 18:40 CowNew開源團隊 閱讀(1275) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本免费污片中国特一级| 相泽南亚洲一区二区在线播放| 怡红院免费的全部视频| 亚洲无码视频在线| 成年网站免费入口在线观看| 国产日产成人免费视频在线观看| 亚洲男同gay片| 亚洲欧洲国产成人精品| 99热在线免费观看| 免费大黄网站在线观看| 视频一区二区三区免费观看| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 四虎影院永久免费观看| 亚洲日韩在线中文字幕综合 | 深夜国产福利99亚洲视频| 免费国产污网站在线观看不要卡| 亚洲精品无码日韩国产不卡?V | 国产精品自在自线免费观看| 狼人大香伊蕉国产WWW亚洲| 亚洲 无码 在线 专区| a级成人毛片免费图片| 亚洲高清无在码在线无弹窗| 野花高清在线电影观看免费视频| 亚洲精品久久无码| 亚洲无码黄色网址| 四虎国产成人永久精品免费 | 亚洲精品网站在线观看你懂的| 日日摸夜夜添夜夜免费视频| 2022中文字字幕久亚洲| 久久午夜夜伦鲁鲁片免费无码| 亚洲国产成人资源在线软件| 免费欧洲美女牲交视频| 中文字幕无码一区二区免费| 亚洲午夜精品在线| 亚洲成av人片不卡无码久久| 免费观看在线禁片| 亚洲国产精品自在自线观看| 亚洲国产成人高清在线观看| aaa毛片免费观看| 亚洲国产精品成人久久久| 免费A级毛片无码A|