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

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

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

    java之家

    開發(fā)心得

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      3 隨筆 :: 1 文章 :: 1 評論 :: 0 Trackbacks

       對于開發(fā)對于頁面連接尤如蜘蛛網(wǎng)一樣,經(jīng)常會有一堆具有千頭萬緒的關(guān)聯(lián)頁面組成的大中型Web應(yīng)用來說,如何組織及處理頁面的跳轉(zhuǎn)成為一個MVC框架非常關(guān)鍵因素。Struts1之所以能得到大家的認(rèn)可,是因?yàn)樗窘鉀Q了數(shù)據(jù)與視圖分離的問題,之所以Struts升級一個版本到Struts2后不再“Struts”了,核心原因除了框架核心技術(shù)落后、很多地方受限制以外,一個原因是他無法很好地組織及處理頁面跳轉(zhuǎn)問題。當(dāng)然盡管升級到了Struts2,但相對于Rails等新興MVC的框架來說,顯得死板了很多。
       而EasyJWeb在頁面組織及處理頁面跳轉(zhuǎn)等方面,提供了很多更加靈活的功能,很多思想來自于Spring MVC、Rails等一些新興Web框架的精髓,他能讓你用比較簡潔的代碼、甚至不用代碼來實(shí)現(xiàn)頁面的跳轉(zhuǎn)。
      在Web應(yīng)用程序開發(fā)中,我們經(jīng)常遇到如下的需求:
      1、從這個頁面連接到另外一個頁面;
      2、在服務(wù)器執(zhí)行完某一段程序后,把輸出導(dǎo)向另外一個頁面;
      3、在服務(wù)器端執(zhí)行完某一段程序后,把輸出導(dǎo)向到另外一段程序繼續(xù)執(zhí)行;
      4、在服務(wù)器程序執(zhí)行完后,選擇使用一個頁面呈現(xiàn)用戶輸出;
      5、頁面跳轉(zhuǎn)要具有較強(qiáng)的環(huán)境適應(yīng)能力,比如部署在跟目錄下跟部署到其它Context目錄下都能執(zhí)行正確的跳轉(zhuǎn);
      6、還有更變態(tài)的,比如EasyJF官網(wǎng),要求使用動態(tài)地址訪問的時候,看到的地址全是動態(tài),當(dāng)使用靜態(tài)地址訪問的時候,地址全是靜態(tài)的,Java Web服務(wù)器不能工作了,Apache或IIS也要保證網(wǎng)頁能正常訪問。
      7、有的人喜歡使用/user/edit/1這樣的url,有的人喜歡使用/user.ejf?cmd=edit&id=1這樣的url,我們要求不管使用哪一種url樣式訪問頁面,連接都會非常友好的變成用戶喜愛的形式。

       可以說,現(xiàn)在很少有框架能完全滿足或者為用戶考慮到如此復(fù)雜多變而對于我們國人來說應(yīng)用性又非常廣泛的需求。一些框架即使提供上面一些功能也是以書寫復(fù)雜的代碼及配置文件為代價(jià)的。在EasyJWeb中,提供了上面所列的這些功能,并提供了非常簡潔的調(diào)用接口及方法。
       針對上面的幾點(diǎn),EasyJWeb的解決方案:
      1,這個用<a>標(biāo)簽,不用說了。
      2、在服務(wù)器執(zhí)行完某一段程序后,把輸出導(dǎo)向另外一個頁面;
      返回html類型的Page對象。
      3、在服務(wù)器端執(zhí)行完某一段程序后,把輸出導(dǎo)向到另外一段程序繼續(xù)執(zhí)行;
       使用forward或者go方法。
      4、在服務(wù)器程序執(zhí)行完后,選擇使用一個頁面呈現(xiàn)用戶輸出;
       使用page方法。
      5、頁面跳轉(zhuǎn)要具有較強(qiáng)的環(huán)境適應(yīng)能力,比如部署在跟目錄下跟部署到其它Context目錄下都能執(zhí)行正確的跳轉(zhuǎn);
      在頁面模板中使用$html.url,比如:<a href="$html.url('user.list')">用戶列表</a>。
      6、不同地址樣式轉(zhuǎn)移
      在頁面模板中使用$html.forward,比如<a href="$html. forward'('news.technic')">技術(shù)前沿</a>。這樣動態(tài)的時候訪問到的是news.ejf?cmd= technic,靜態(tài)的時候訪問到的是/news/technic.html。
      7、傳統(tǒng)及現(xiàn)代的URL樣式轉(zhuǎn)換
       仍然是使用$html.url,或$html.forward標(biāo)簽,他能感知你的url樣式。比如:<a href="$html.url('user.add')">添加用戶</a>。你使用user.ejf?cmd=lsit,訪問應(yīng)用,則當(dāng)點(diǎn)添加user.ejf?cmd=add。而如果你使用/ejf/user/list訪問應(yīng)用,則編輯按鈕的連接變成ejf/user/add。
      
      在代碼中,除了可以使用最原始的return new Page()方式返回用戶的視圖模板以外,還可以使用一些快捷方法來實(shí)現(xiàn)靈活的視圖查詢及跳轉(zhuǎn)。比如,go、forward、page等方法。下面看一個用戶添刪改查的示例中的Action代碼如下:

    import com.easyjf.container.annonation.Inject;
    import com.easyjf.core.support.query.QueryObject;
    import com.easyjf.util.CommUtil;
    import com.easyjf.web.WebForm;
    import com.easyjf.web.core.AbstractPageCmdAction;
    import com.easyjf.web.tools.IPageList;

    public class UserAction extends AbstractPageCmdAction {
     
     @Inject
     
    private UserService service;
     
     
    public void setService(UserService service) {
      
    this.service = service;
     }

     
    /**
      * 顯示添加用戶的界面user/edit.html
      
    */

     
    public void add()
     
    {
      page(
    "edit");
     }

     
    public void edit(WebForm form)
     
    {
      String id
    =(String)form.get("id");
      User user
    =this.service.getUser(new Long(id));
      form.addPo(user);
     }

     
    public void save(WebForm form)
     
    {
      User user
    =form.toPo(User.class);
      
    if(hasErrors())
      
    {
       page(
    "edit");
       
    return;
      }

      service.saveUser(user);
      forward(
    "list");
     }

     
    public void update(WebForm form)
     
    {
      String id
    =(String)form.get("id");
      User user
    =this.service.getUser(new Long(id));
      form.toPo(user,
    true);
      
    if(hasErrors())
      
    {
       page(
    "edit");
       
    return;
      }

      service.updateUser(user);
      forward(
    "list");
     }

     
    public void delete(WebForm form)
     
    {
      String id
    =(String)form.get("id");
      User user
    =this.service.getUser(new Long(id));
      service.delUser(user);
      go(
    "list");
     }

     
    public void list(WebForm form)
     
    {
      QueryObject qo
    =form.toPo(QueryObject.class);
      IPageList pageList
    =service.queryUser(qo);
      CommUtil.saveIPageList2WebForm(pageList, form);  
     }

    }


    UserService接口:
    public interface UserService {
     
    /**
      * 根據(jù)id查詢用戶
      * 
      * 
    @param id
      * 
    @return
      
    */

     User getUser(Long id);

     
    /**
      * 保存用戶
      * 
      * 
    @param user
      
    */

     
    void saveUser(User user);

     
    /**
      * 修改用戶信息
      * 
      * 
    @param user
      
    */

     
    void updateUser(User user);

     
    /**
      * 刪除用戶
      * 
      * 
    @param user
      
    */

     
    void delUser(User user);

     
    /**
      * 查詢用戶信息
      * 
    @param query 
      * 
    @return 分頁信息及記錄集
      
    */

     IPageList queryUser(IQueryObject query);
    }


    posted on 2007-12-14 13:15 java fan nb 閱讀(749) 評論(0)  編輯  收藏 所屬分類: struts框架

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: AAAAA级少妇高潮大片免费看| 曰批视频免费30分钟成人| 国产亚洲一区二区三区在线| 一级毛片**不卡免费播| 67194在线午夜亚洲| 亚洲国产精品一区二区第四页| 午夜视频免费在线观看| 国产精品亚洲AV三区| 婷婷久久久亚洲欧洲日产国码AV| 成年女人免费视频播放77777| 黄色视屏在线免费播放| 国产成人亚洲精品| 中文亚洲AV片不卡在线观看| 成人免费视频网站www| 亚洲第一视频在线观看免费 | 中文日韩亚洲欧美制服| 亚洲一区二区三区在线播放| 又黄又爽又成人免费视频| 任你躁在线精品免费| 亚洲妇女无套内射精| 亚洲精品高清国产一久久| 日韩一区二区三区免费体验| 一级毛片**不卡免费播| g0g0人体全免费高清大胆视频| 亚洲va在线va天堂va手机| 亚洲成AV人片在线观看ww| 免费A级毛片在线播放不收费| 在线视频精品免费| 国产一级片免费看| 大片免费观看92在线视频线视频 | 精品亚洲成AV人在线观看| 免费一级毛片在线观看| 免费99精品国产自在现线| 久久精品成人免费网站| 亚洲一区二区三区免费| 亚洲成在人线在线播放无码| 亚洲国产视频网站| 亚洲一区免费观看| 亚洲av无码片在线播放| 一本久久a久久精品亚洲| 免费一级一片一毛片|