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

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

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

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

    常用鏈接

    留言簿(19)

    隨筆檔案(115)

    文章檔案(4)

    新聞檔案(1)

    成員連接

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

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

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

    public void doEdit()
    {
    }

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

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

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

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

    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
      可以這么說,前臺諸多的動態頁面,都不需要書寫Java代碼,就能實現動態內容生成。如果你借助一些基礎引擎,比如EasyJF開發的CMS引擎來或者是自己構造一些引擎,完全可以實現不用寫Java代碼,就能開發出功能比較強的Java Web應用。比如建一個站點、建論壇、百科、Blog、全文檢索等。
    4、重定向輸出流
    假如你希望你Action的執行結果不要直接輸出的瀏覽器上,而是直接輸出到服務器上的一個文件中保存起來(生成靜態html是我們在建大型網站中所必須的),或者是輸出到互聯網上的某一個終端或結點。EasyJWeb給你提供了最簡單解決方案,你隨時可以根據需要對Action執行結果進行重定向,比如下面的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);
    //執行news命令的一系列邏輯
    page(“news”);//使用news模板來輸出結果
    }

     

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

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

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

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


    網站導航:
     
    主站蜘蛛池模板: 一二三四免费观看在线视频中文版 | 黄色网页在线免费观看| 成人毛片18女人毛片免费视频未| 亚洲黄色在线观看网站| 99爱在线精品视频免费观看9| 亚洲成人精品久久| 久久综合给合久久国产免费 | 曰批全过程免费视频免费看| 亚洲成a人片在线观看久| 麻豆va在线精品免费播放| 国产成人aaa在线视频免费观看| 国产亚洲蜜芽精品久久| 久久久久亚洲精品男人的天堂| 青青操免费在线视频| 亚洲韩国—中文字幕| 国产va精品免费观看| 国产精品国产亚洲区艳妇糸列短篇| 免费国产成人高清视频网站 | 国产免费区在线观看十分钟| 久久久无码精品亚洲日韩蜜桃 | 国产亚洲精品岁国产微拍精品| 日本不卡免费新一区二区三区| 亚洲伊人久久大香线蕉影院| 国产美女无遮挡免费视频网站| v片免费在线观看| 亚洲国产香蕉碰碰人人| 最近2019中文免费字幕| 特级毛片全部免费播放| 久久久久久亚洲精品中文字幕 | 5g影院5g天天爽永久免费影院| 中文字幕在线日亚洲9| 亚洲AV无码不卡在线观看下载| 久久久国产精品福利免费| 91亚洲视频在线观看| 亚洲成a人在线看天堂无码| 91在线老王精品免费播放| 亚洲av日韩综合一区二区三区 | 亚洲av永久综合在线观看尤物| 免费a级毛片18以上观看精品| 全免费a级毛片免费看| 久久亚洲色WWW成人欧美|