《Ajax开发精要》关于ajaxanywhere 教程五

来源:互联网 发布:ipad乐器软件 编辑:程序博客网 时间:2024/05/19 19:33

5.设置页面可刷新区域

AjaxAnywhere使用自定义标签<aa:zone>来划分页面区域,从而动态地指定页面可刷新区域。通过这种方法,只需要在页面适当位置中添加<aa:zone name=""></aa:zone>标签。对于已有的Web应用程序,几乎无须更改原有的代码,只须使用<aa:zone>标签指定更新区域。AjaxAnywhere会将<aa:zone>标签解析为<span id=""></span>的标记,并最终通过更新其innerHTML属性值来达到更新页面的目的。

区域划分好之后,需要告诉AjaxAnywhere哪些区域需要更新,即设置页面可刷新区域。AjaxAnywhere提供两种方式设置页面可刷新区域:客户端重载AjaxAnywhere对象的getZonesToReload()方法,或者服务器端调用AAUtil类的addZonesToRefresh(ServletReq uest request, String commaSeparatedZonesList)方法。

如果使用客户端重载的方式,则需要将<aa:zone name=""></aa:zone>所指定区域的name属性值组织成以逗号“,”分隔的字符串。例程11-35根据区域内的复选框选中情况来确定该区域是否可刷新。

例程11-35  重载AjaxAnywhere对象的getZonesToReload()方法

ref_All = false;

 

ajaxAnywhere.getZonesToReload = function (url){

    if (ref_All)

        return "document.all";

    var zones="";

    var form = this.findForm();

    for (var i=0;i<form.elements.length;i++){

        var el = form.elements[i];

        if (el.type=="checkbox" && el.checked)

            zones += el.value+",";

    }

    return zones;

}

如果使用服务器端设置的方式,则需要从request中或者其他地方获取指定的zone名称,调用AAUtil类的addZonesToRefresh(ServletRequest request, String commaSeparated ZonesList)并逐个将其保存。当然,在此之前应该将要刷新区域的名称以“zones=zoneNa me1,zoneName2的形式附加在请求中。例程11-36展示了这一过程。

例程11-36  调用AAUtil类的方法保存可刷新区域

<%

if (AAUtils.isAjaxRequest(request)) {

    String[] commaSeparatedZones = request.getParameterValues ("zones");

    for (int i = 0; commaSeparatedZones != null && i < commaSeparated Zones.length; i++) {

        String zone = commaSeparatedZones[i];

        AAUtils.addZonesToRefresh(request, zone);

    }

}

%>

这两个案例也都可以在AjaxAnywhere提供的demo演示包中找到。有兴趣的读者可以自行查阅相关代码。