2009年4月20日星期一

ArcGIS Server Java ADF 案例教程 15

二 【案例】自定义Command使地图等比放大

在这一小节,我们通过自定义Command定制一个按钮,这个按钮每点击一次,地图会放大1倍。通过这个简单案例,让我们来熟悉一下Command的用法。

实现这个功能的主要环节是实现自己的监听器类,以下是这个类的定义:
import com.esri.adf.web.data.WebContext;
import com.esri.adf.web.util.WebUtil;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;

public class ZoomInListener implements ActionListener
{
public static double ZOOM_FACTOR = 0.5;

public void processAction(ActionEvent event) throws AbortProcessingException
{
WebContext webContext = WebUtil.getWebContext(event.getComponent());
webContext.getWebMap().getCurrentExtent().expand(ZOOM_FACTOR);
webContext.refresh();
}
}

当然,在JSF页面中的用法和上面类似,也很简单:

这个ZoomInListener监听器类主要需要实现了ActionListener的processAction方法,当用户点击这个id为“zoomIn”的Command的时候,这个监听器会被触发,然后其processAction方法就会被执行。

在这个processAction方法中,我们首先获得WebContext对象,通过WebContext我们就可以获得WebMap对象,进而对它的currentExtent属性进行操作(地图范围缩小1倍),再刷新WebContext对象。这个过程很简单,中间有两个环节这里稍作解释。

一个环节是如何获得WebContext对象。processAction是JSF的ActionListener接口的一个方法,这个方法的参数是ActionEvent ,因此它的属性与ADF基本没有关系,所以,获得WebContext就需要用到ADF的WebUtil工具类,ESRI的工程师为了可以在各种环境下获得WebContext这个ADF中非常重要的环境,制造了WebUtil这个工具类及其getWebContext方法,通过这个方法我们可以很方便地获得WebContext对象。

另外一个环节就是WebContext对象的refresh方法,我们在对服务器端的WebMap对象进行一些操作以后,调用了WebContext的refresh方法以后,浏览器中的地图就会刷新成新的视图,其相关的TOC、Overview等组件也会跟着刷新,这很奇妙吧。

没有评论: