<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年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(19)

    隨筆檔案(115)

    文章檔案(4)

    新聞檔案(1)

    成員連接

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

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

    2、視圖切換及對(duì)象
      EasyJWeb中的頁(yè)面結(jié)果是由Page來(lái)代表的,當(dāng)前只提供了三種類型的Page,即template、html及null。其中template代表模板頁(yè)面,html代表導(dǎo)向頁(yè)面,null表示不返回信息??梢酝ㄟ^(guò)每一個(gè)Action中的execute方法中的Module參數(shù),來(lái)讀取配置

    public void doEdit()
    {
    }

    在當(dāng)前模塊的Page。
    如return module.finadPage(“list”);
    也可以在Action中直接構(gòu)造一個(gè)Page對(duì)象來(lái)進(jìn)行視圖的切換及導(dǎo)向。
    如 return new Page(“index”,”/news/index.html”);

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

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

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

    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
      可以這么說(shuō),前臺(tái)諸多的動(dòng)態(tài)頁(yè)面,都不需要書(shū)寫(xiě)Java代碼,就能實(shí)現(xiàn)動(dòng)態(tài)內(nèi)容生成。如果你借助一些基礎(chǔ)引擎,比如EasyJF開(kāi)發(fā)的CMS引擎來(lái)或者是自己構(gòu)造一些引擎,完全可以實(shí)現(xiàn)不用寫(xiě)Java代碼,就能開(kāi)發(fā)出功能比較強(qiáng)的Java Web應(yīng)用。比如建一個(gè)站點(diǎn)、建論壇、百科、Blog、全文檢索等。
    4、重定向輸出流
    假如你希望你Action的執(zhí)行結(jié)果不要直接輸出的瀏覽器上,而是直接輸出到服務(wù)器上的一個(gè)文件中保存起來(lái)(生成靜態(tài)html是我們?cè)诮ù笮途W(wǎng)站中所必須的),或者是輸出到互聯(lián)網(wǎng)上的某一個(gè)終端或結(jié)點(diǎn)。EasyJWeb給你提供了最簡(jiǎn)單解決方案,你隨時(shí)可以根據(jù)需要對(duì)Action執(zhí)行結(jié)果進(jìn)行重定向,比如下面的Action中,我們可以把輸出結(jié)果指定到服務(wù)器上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模板來(lái)輸出結(jié)果
    }

     

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

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

    不過(guò),還是支持你們  回復(fù)  更多評(píng)論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 中文字幕在线视频免费观看| 91精品免费不卡在线观看| 亚洲欧洲日产国码无码久久99| 99精品视频在线观看免费播放| 亚洲午夜无码毛片av久久京东热| www亚洲一级视频com| 97在线视频免费| 日本一区二区在线免费观看| 久久精品国产亚洲AV电影| 国产一区二区三区在线免费观看| 色播在线永久免费视频网站| 亚洲综合精品伊人久久| 亚洲国产婷婷六月丁香| 超pen个人视频国产免费观看| 在线观看免费无码专区| 亚洲AV永久无码天堂影院 | 国内精品久久久久久久亚洲 | 亚洲乱色熟女一区二区三区丝袜| 精品久久久久成人码免费动漫| jizz免费在线影视观看网站| 日韩亚洲产在线观看| 亚洲福利在线观看| 亚洲爽爽一区二区三区| 国产成人无码免费看视频软件| a级片免费在线播放| 国产成人亚洲综合a∨| 亚洲毛片一级带毛片基地| 亚洲深深色噜噜狠狠爱网站| 国产小视频免费观看| 999久久久免费精品国产| 久久久久免费精品国产小说| 一级做a爰片久久毛片免费陪 | 亚洲经典在线观看| 久久久青草青青国产亚洲免观| 啦啦啦www免费视频| 美丽姑娘免费观看在线观看中文版 | 亚洲AV无码乱码在线观看性色扶| 成人免费午夜视频| 精品无码免费专区毛片| 麻豆精品不卡国产免费看| 国产免费久久精品丫丫|