设计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 刹那 阅读(718) 评论(0)  编辑  收藏 所属分类: 我的j2ee轻量级框架


只有注册用户登录后才能发表评论。


网站导航: