ArcGIS Server Java ADF 案例教程 16

三 WebContext的refresh方法

提示:本小节内容是ADF内部实现机制,对ADF的使用没有影响,如没有兴趣可以跳过。

当调用WebContext的refresh方法的时候, ADF会同步WebContext中所有相关属性。比如当我改变了WebMap的视图范围,然后再调用WebContext的refresh方法,那么ADF会通知WebContext中的WebOverview等对象去同步相关信息,比如同步改变视图范围等。以上过程ADF在后台是通过Observer机制实现的。当ADF调用WebContext的refresh方法时,ADF会通知所有注册到WebContext的WebContextObserver 对象,调用其update方法。实现WebContextObserver这个接口的大概有如下这些类:AWSTocFunctionality, ExtentHistory, MapToolsTask, PrintTask, RoutingTask, SearchAttributesTask, WebMap, WebOverview, WebScaleBar。

以上对WebContext的刷新都是在服务器端。但是,当一个Command被点击以后,服务器端的更新又是怎么被输出到浏览器端的呢?下面就让我们从浏览器端开始,详细地了解一下Command的工作原理。

以下是上一节的案例中用a:command标签在JSF页面中定义了一个Command,在下面我们看一下这段标签在浏览器中相应的输出:

以下是上面的标签在浏览器中的输出:
var zoomIn = new EsriMapServerAction("zoomIn", "");
zoomIn.clientPostBack = true;
zoomIn.defaultImage = "/AgsDemo/images/tasks/maptools/zoomin.png";
zoomIn.hoverImage = "/AgsDemo/images/tasks/maptools/zoominU.png";
zoomIn.selectedImage = "/AgsDemo/images/tasks/maptools/zoominD.png";
zoomIn.isDisabled = false;
zoomIn.showLoading = true;
toolbar.addToolItem(zoomIn);


可见,一个Command对应输出的是EsriMapServerAction这个JavaScript对象,这个对象在“/WebContent/js/esri_map.js”中定义。打开EsriMapServerAction的定义你会发现,当点击这个Command的时候,ADF会提交当前页面;当然,由于我们设置了clientPostBack属性为TRUE,因此交互通过AJAX方式进行,其回调函数为EsriControls的processPostBack函数——EsriControls在“/WebContent/js/esri_core.js”中定义,它包含了所有的ADF客户端组件。

提示:以上这段这里说的很简单,其实包含很多的内容,有兴趣的话可以在这几个JavaScript脚本中仔细研究相关对象和调用关系。

ADF在服务器端会有一个PostBackPhaseListener 去监听所有的AJAX请求,有兴趣的话你可以解开“/WebContent/WEB-INF/lib/arcgis_webcontrols.jar”这个库文件,在其中的“META-INF”目录下有一个“faces-config.xml”中定义了这个PhaseListener。

AJAX请求的参数中会有一个“doPostBack”值,当一个AJAX请求发到服务器的时候,PostBackPhaseListener会监听到这个请求并找到“doPostBack”这个值从而执行后续的操作。当这些操作完成以后,PostBackPhaseListener通过AJAXUtil 的writeResponse方法输出AJAX响应到请求的浏览器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值