設計java

          j2ee輕量級框架,IMVC,IORM && web網絡游戲

          IMVC框架特性詳解--ajax支持

              IMVC對ajax有了很好的支持。主要體現在兩方面。

              一 ajax View類型支持。Imvc的視同是通過一個View類來返回的,在action中通過return new View("/xxx.html")返回一個視圖,然后IMVC會通過Value中的數據渲染這個視圖。這是一般的流程,有些特殊的流程可以返回其他類型的View,我們先來看看View類的代碼:
          public final class View implements Cloneable{
              
          /**
               * 屬性介紹:普通的view,通過模板轉換
               
          */
              
          public static final int TYPE_VIEW=1;
              
          /**
               * 屬性介紹:轉向,不改變url
               
          */
              
          public static final int TYPE_REDIRECT=2;
              
          /**
               * 屬性介紹:專心 ,改變url
               
          */
              
          public static final int TYPE_REDIRECT2=3;
              
          /**
               * 屬性介紹:直接返回string,path的值
               
          */
              
          public static final int TYPE_AJAX=4;
              
              
          public static final int TYPE_EXCEPTION=5;

              
          private String path;
              
          private int type=1;
              
          public View(String path){
                  
          this.path=path;
              }
              
          public View(String path,int type){
                  
          this.path=path;
                  
          this.type=type;
              }
              
          public View(Map map){
                  JSONObject jsono
          =JSONObject.fromObject(map);
                  path
          =jsono.toString();
                  type
          =TYPE_AJAX;
              }
              
          public View(List array){
                  JSONArray jsona
          =JSONArray.fromObject(array);
                  path
          =jsona.toString();
                  type
          =TYPE_AJAX;
              }
              
          public View(Object bean){
                  JSONObject jsono
          =JSONObject.fromObject(bean);
                  path
          =jsono.toString();
                  type
          =TYPE_AJAX;
              }
              
          public String getPath() {
                  
          return path;
              }
              
          public void setPath(String path) {
                  
          this.path = path;
              }
              
          public int getType() {
                  
          return type;
              }
              
          public void setType(int type) {
                  
          this.type = type;
              }

              
          public View clone(String path){
                  View v
          =cloneBase();
                  v.path
          =path;
                  
          return v;
              }
              
          public View clone(String path,int type){
                  View v
          =cloneBase();
                  v.path
          =path;
                  v.type
          =type;
                  
          return v;
              }
              
          public View clone(Map map){
                  View v
          =cloneBase();
                  JSONObject jsono
          =JSONObject.fromObject(map);
                  v.path
          =jsono.toString();
                  v.type
          =TYPE_AJAX;
                  
          return v;
              }
              
          public View clone(List array){
                  View v
          =cloneBase();
                  JSONArray jsona
          =JSONArray.fromObject(array);
                  v.path
          =jsona.toString();
                  v.type
          =TYPE_AJAX;
                  
          return v;
              }
              
          public View clone(Object bean){
                  View v
          =cloneBase();
                  JSONObject jsono
          =JSONObject.fromObject(bean);
                  v.path
          =jsono.toString();
                  v.type
          =TYPE_AJAX;
                  
          return v;
              }
              
          private View cloneBase(){
                  View v
          =null;
                  
          try {
                      v 
          = (View) super.clone();
                  } 
          catch (CloneNotSupportedException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  
          return v;
              }
          }
          我們主要關注以下幾個變量:
           /**
               * 屬性介紹:普通的view,通過模板轉換
               
          */
              
          public static final int TYPE_VIEW=1;
              
          /**
               * 屬性介紹:轉向,不改變url
               
          */
              
          public static final int TYPE_REDIRECT=2;
              
          /**
               * 屬性介紹:專心 ,改變url
               
          */
              
          public static final int TYPE_REDIRECT2=3;
              
          /**
               * 屬性介紹:直接返回string,path的值
               
          */
              
          public static final int TYPE_AJAX=4;
              
          public static final int TYPE_EXCEPTION=5;
              第一個是普通的View,通過ViewFactory.getView("/tt.html")這個方法返回的是普通的view,也就是可以通過IMVC渲染的視圖,而
          TYPE_REDIRECT則是返回一個跳轉view,可以跳轉到下一個action,TYPE_REDIRECT2也是一個跳轉view,不過是改變URL地址的view。TYPE_AJAX就是ajax試圖了,也是今天要講的主角了,至于最后一個TYPE_EXCEPTION,是把異常返回到客戶端瀏覽器到view,這里暫時不考慮。我們可以通過這樣一個構造函數創造出ajax試圖,比如new  View("這是ajax信息",View.TYPE_AJAX),或者通過ViewFactory.getView("這是ajax信息",View.TYPE_AJAX)也是一樣,不過用factory創建的對象是通過對象的clone創建的,能節省一定的性能開銷。當返回的是一個ajax View的時候,信息就會直接返回,而不是通過渲染試圖,比如上面的就直接返回“這是ajax信息”給客戶端,如果這個action是由客戶端ajax請求的話,直接返回數據,是不是很方便呢?

              接下來的ajx特性也許會讓你覺得更方便,比如以下代碼:

          ....action前面的內如.....
              User u
          =new User();
              u.setAge(
          1);
              u.setName(
          "汪汪汪");
              return ViewFactory.getView(u);
              這樣的返回會直接在客戶端打印出 {"age":1,"name":"汪汪汪"};也就是IMVC把對象映射成立JSON(一種js對象的String形式),這個返回數據在客戶端直接可以調用,比如data.name就直接調用出“汪汪汪”,是不是很方便?而且IMVC還支持把List,數組,Map,還有對象相互無限級嵌套返回成JSON數據,這將大大增加AJAX開發的敏捷性和清晰性。

              二 ajax Chain支持。我們假設有一個全部ajax的網頁,里面有幾個div中的數據都是通過ajax的方式向服務器請求的,那么每個div都會請求一次ajax action,這樣就導致了請求次數頻繁,資源的浪費,IMVC提供了一種ajaxChain的概念,可以通過一個url請求多個action,然后把數據自動合并,比如下面的url
          http://xxx.com/ajaxChain.x?id=|one,two?id=1|
          這個url請請求了兩個action,然后把action數據合并,比如本來one.x返回的數據是{"name":"111"},而two返回的數據是 {"name":"2222"};則現在應該返回的是{"one":{"name":"111"},"two?id=1",{"name":"2222"}},這樣,ajaxChain支持無數個action的連接。這樣以后可以將多個ajax合并為一個ajax,節省服務器資源。

              好了,IMVC的ajax支持就講到這里。


          --InstantMVC:j2ee輕量級mvc框架

          posted on 2008-06-11 19:14 剎那 閱讀(729) 評論(0)  編輯  收藏 所屬分類: 我的j2ee輕量級框架

          主站蜘蛛池模板: 贞丰县| 贡觉县| 英超| 澜沧| 瓮安县| 电白县| 曲靖市| 龙山县| 武冈市| 临清市| 电白县| 敖汉旗| 阿合奇县| 萨嘎县| 登封市| 年辖:市辖区| 周宁县| 勐海县| 潞城市| 当阳市| 廉江市| 涞源县| 利津县| 蓬溪县| 四川省| 永寿县| 沿河| 澳门| 竹北市| 临澧县| 贡山| 泾川县| 马公市| 儋州市| 揭东县| 萍乡市| 安泽县| 九寨沟县| 万宁市| 呼和浩特市| 普宁市|