Scale
我们如何将服务器传过来的数据更新这个文本框呢?来看看前面讲座中提到的往服务器端发送请求时候的那个回调函数:
var xmlHttp = EsriUtils.sendAjaxRequest(url, params, true, function() { updateInfoResponse(xmlHttp); });
我们把回调函数的代码也贴在这里: function updateInfoResponse(xmlHttp) {
if (xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200) { var xml = xmlHttp.responseXML;
var scale=xml.getElementsByTagName(\ document.getElementById(\ } }
这个代码相比大家都能看明白了,先判断服务器端是不是已经处理结束,并且服务器的状态一切正常,然后得到服务器返回的xml,通过getElementsByTagName把里面包含着的比例尺数据提取出来,组合中我们熟悉的文本,然后把这个文本填充到ID为scale的文本框中。
我们来总结一下,我们发送了一个请求,这个请求包含了MapID参数,和一个标志参数ajaxdemo,MapID参数可以让服务器得到MapControl的实例和WebMap,进而得到比例尺。Ajaxdemo让服务器端的处理程序可以正确的辨识这个请求是我们这个PhaseListener需要处理的请求,处理结束后,返回XML到客户端。客户端的回调函数处理XML文档,提取出比例尺信息,写入到页面的文本框中。撩起Ajax神秘的面纱后,发现原来Ajax不过如此,老酒装新瓶,重新包装了一下。
讲到这里,大家心中想必还有两个疑点,第一个是说了半天,我们是怎么触发这个请求的呢?通过定时器触发么?不是。我们是通过地图的变化进行触发的,这样是最最合理的,每当地图更新了,客户端会自动发送一个请求,要求地图变化后的比例尺。非常合理,但是怎么进行设置呢?我们经常说,我们的控件是支持Ajax的,如何支持?我们支持通过监听器的方式,监听地图的变化,如下面的代码所示:
var map = EsriControls.maps[\
map.addUpdateListener(\
这样,每次地图更新时,都会触发updateInfoRequest函数,该函数用来向服务器端发送请求。 另外一个疑问是Phaselistener怎么设置,看一下JavaDoc可以知道,我们可以在faces-config.xml文件中,用下面的语句进行设置:
34
Ajax的讲座到此告一段落了,欢迎大家讨论。
15、ArcGIS Server JAVA 讲座 自定义Functionality
今天我们来讲讲如何自定义Functionality,自定义Functionality有很多用处。它最大的用处是可以访问数据源。我们来看看已经存在的Functionality:
AGSMapFunctionality, AIMSMapFunctionality, AWSMapFunctionality, EJBMapFunctionality, WMSMapFunctionality等等等等,查看GISFunctionality接口的子类你可以看到ADF中更多的Functionality。
这些Functionality无一不跟后台的资源有关。我们来看看Functionality接口的定义: public void initFunctionality(GISResource arg0) {
}
public void destroyFunctionality() { }
public GISResource getResource() { return null; }
每个functionality都需要实现Functionality这个接口,这个接口里面有三个方法,初始化方法,destroy方法和得到资源的方法。GISResource对应于一个特定的资源,比如我们最常用的资源就是AGSLocalMapResource,当然也可以是ArcIMS的Resource,取决于你把这个functionality注册到哪个Resource中。我们来看一个例子,虽然Functionality一般跟资源有关,但是也可以做其它的事情,比如我们这里举一个非常简单的例子,FixedZoomin:
public class DemoFunction implements GISFunctionality { WebContext ctx;
public void zoomInFunction(){
WebMap wmap = ctx.getWebMap(); WebExtent ext = wmap.getCurrentExtent();
35
ext.expand(0.5); wmap.setCurrentExtent(ext); ctx.refresh(); }
public void initFunctionality(GISResource arg0) { ctx=arg0.getWebContext();
System.out.print(\}
public void destroyFunctionality() {
System.out.print(\}
public GISResource getResource() { return null; } }
非常简单的一个例子,从GISResource里面得到WebContext,然后得到WebMap,修改WebMap的Extent,放大功能就实现了。你说非得跟资源有关系,那么确实也有点关系,因为我们还是使用了后台的数据来进行操作。需要说明的是,我们这个代码对于所有的Resource都是适用的,不管你后台使用了ArcIMS,还是其它的Resource。ADF的妙处也在这里。
写好了这个Funcionality,那么我们来看看如何部署的,每一个Functionality都需要部署到某个Resource中,那么我来看一下,这个functionality如何来部署:
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: