隨筆 - 115  文章 - 481  trackbacks - 0
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

            在基于請求轉(zhuǎn)發(fā)型的MVC框架中,給用戶提供一個簡單、靈活的視圖切換及頁面導向功能是非常關鍵的。作為EasyJWeb特性介紹系統(tǒng)的一篇文章,本篇主要介紹EasyJWeb中的頁面切換及導向機制。EasyJWeb引入了純模板的機制,通過其提供結構清晰的Module、Command、Page等結構,從而能實現(xiàn)非常簡單靈活的視圖切換及導向。
          1、快捷方法,使用最簡單的方式滿足你80%的視圖切換及頁面導向需求
            在AbstractCmdAction中,提供了forward及go方法來滿足不同的頁面導向需求。下面給出具有代表性的視圖切換及頁面導向示例:
          forward(“list”)-轉(zhuǎn)到本模塊中的list命令處執(zhí)行;
          forward(“person.new”)-轉(zhuǎn)到person模塊中的new命令執(zhí)行;
          forward(“new”,”person”)-與forward(“person.new”)相同;
          page(“list”)-直接使用邏輯名稱為list模板來作當前命令的輸出;
          go(“list”)-開啟一個全新的request請求,執(zhí)行當前模塊的list命令;
          go(“person.list”)-開啟一個全新的request請求,執(zhí)行person模塊的list命令;
          go(“list”,”person”)-與go(“person.list”)相同;
          go(“list?parentId=5”)-開啟一個全新的request請求,執(zhí)行l(wèi)ist命令,并往action中傳遞parentId參數(shù)。

          2、視圖切換及對象
            EasyJWeb中的頁面結果是由Page來代表的,當前只提供了三種類型的Page,即template、html及null。其中template代表模板頁面,html代表導向頁面,null表示不返回信息。可以通過每一個Action中的execute方法中的Module參數(shù),來讀取配置

          public void doEdit()
          {
          }

          在當前模塊的Page。
          如return module.finadPage(“list”);
          也可以在Action中直接構造一個Page對象來進行視圖的切換及導向。
          如 return new Page(“index”,”/news/index.html”);

          3、聰明的AbstractPageCmdAction
            在AbstractCmdAction的基礎上,EasyJWeb提供了另外一個對視圖具有自動識別能力的AbstractPageCmdAction。該類能通過應用“慣例代替配置”來智能判斷程序中要使用的視圖模板,甚至不需要書寫方法簽名也可以調(diào)用視圖模板。
          如一個空簽名的command方法:

            該方法中雖然沒有一句代碼,也沒有明確的視圖切換或轉(zhuǎn)向。但AbstractPageCmdAction會根據(jù)慣例原則,自動選擇edit.html文件作為視圖模板。
            另外針對下面的url:person.ejf?cmd=new或/ejf/person/new
          假如PersonAction中沒有doNew方法,則AbstractPageCmdAction會根據(jù)慣例原則,優(yōu)先考慮/views/person/目錄中是存存在new.html文件,若存在,則將直接返回該模板,即不用寫java方法,也能產(chǎn)生動態(tài)頁面。

            作為一個應用實踐之一,在我們開發(fā)一般的WEB應用中,我們習慣于把前臺及后臺分開,比如所有前臺展示的放在一個模塊Module(即Action)中。網(wǎng)站前臺經(jīng)常會有非常多的頁面,而這些頁面或多或少都會包含相同或相似邏輯的動態(tài)內(nèi)容,此時若針對每一個頁面都寫一個Command來處理,顯得很麻煩。可以借助Velocity的標簽,以及AbstractPageCmdAction中的視圖界面智能選擇功能,不用寫java方法,即加載各種動態(tài)頁面。
            下面是EasyJF官方網(wǎng)站NewsAction中的代碼,類似這樣的代碼同也用于很多EasyJF開源團隊所開發(fā)的開源及商業(yè)項目中:

          public class NewsAction extends AbstractPageCmdAction {
           
          private NewsUtil newsUtil;
           @InjectDisable
           
          private Map utils = new HashMap();
           
          public void setNewsUtil(NewsUtil newsUtil) {
            
          this.newsUtil = newsUtil;
           }

           
          public void setUtils(java.util.Map utils) {
            
          this.utils = utils;
           }


           
          public Object doAfter(WebForm form, Module module) {
            form.addResult(
          "nu", newsUtil);
            form.addResult(
          "NU", newsUtil);
            java.util.Iterator it 
          = utils.entrySet().iterator();
            
          if (it != null{
             
          while (it.hasNext()) {
              Map.Entry en 
          = (Map.Entry) it.next();
              form.addResult((String) en.getKey(), en.getValue());
             }

            }

            
          return super.doAfter(form, module);
           }

          }


           

          /news.ejf?cmd=index
          /news.ejf?cmd=technic
          /news.ejf?cmd=download
            可以這么說,前臺諸多的動態(tài)頁面,都不需要書寫Java代碼,就能實現(xiàn)動態(tài)內(nèi)容生成。如果你借助一些基礎引擎,比如EasyJF開發(fā)的CMS引擎來或者是自己構造一些引擎,完全可以實現(xiàn)不用寫Java代碼,就能開發(fā)出功能比較強的Java Web應用。比如建一個站點、建論壇、百科、Blog、全文檢索等。
          4、重定向輸出流
          假如你希望你Action的執(zhí)行結果不要直接輸出的瀏覽器上,而是直接輸出到服務器上的一個文件中保存起來(生成靜態(tài)html是我們在建大型網(wǎng)站中所必須的),或者是輸出到互聯(lián)網(wǎng)上的某一個終端或結點。EasyJWeb給你提供了最簡單解決方案,你隨時可以根據(jù)需要對Action執(zhí)行結果進行重定向,比如下面的Action中,我們可以把輸出結果指定到服務器上d:\myapp\news.html文件中。

          public void doNews(){
          java.io.Writer writer
          = new OutputStreamWriter(new FileOutputStream(new File("d:\myapp\news.html")),"UTF-8");
          ActionContext.getContext().setCustomWriter(writer);
          //執(zhí)行news命令的一系列邏輯
          page(“news”);//使用news模板來輸出結果
          }

           

          posted on 2007-08-22 09:46 簡易java框架 閱讀(782) 評論(1)  編輯  收藏

          FeedBack:
          # re: 靈活的視圖切換及導向 2007-09-01 22:40 mingj
          感覺就是代碼糖而已

          不過,還是支持你們  回復  更多評論
            

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 蛟河市| 札达县| 西乌珠穆沁旗| 塔河县| 邯郸市| 东莞市| 延庆县| 健康| 秦皇岛市| 蚌埠市| 从江县| 肥乡县| 巴林右旗| 岳阳市| 资兴市| 都匀市| 临桂县| 星子县| 乌兰察布市| 广丰县| 深州市| 加查县| 桐柏县| 西峡县| 图木舒克市| 西充县| 邵武市| 临泽县| 南宁市| 台中县| 天峨县| 基隆市| 清流县| 松滋市| 淳化县| 洛南县| 隆子县| 龙陵县| 灵台县| 万山特区| 贡觉县|