ArcGIS Server Java ADF 案例教程 35

二    自定义一个地图放大5倍的Functionality【案例】
在这个小节,我们去实现一个GISFunctionality去封装前面实现过的使地图放大5倍的功能。
首先,当然是新建一个Functionality类并添加到ADF应用中去。前面我们经常通过直接编辑代码的方式去定义类和配置文件,这主要是为了帮助你理解ADF应用的配置和各个元素的相互关系。现在估计你也有一定了解了,我们也就尽量省事些,多使用ArcGIS的eclipse插件去完成这些工作吧。
让我们打开eclipse的菜单【ArcGIS】-【Class Templates】-【Functionality】,在新建的窗口上填上我们希望实现的Functionality的包名、类名、实例化 Managed Bean的名称、注册到的Resource等,完成以后ADF会自动新建一个实现GISFunctionality接口的类,并把这个类实例化后注册到 ADF应用的配置文件中去。

ArcGIS Server Java ADF 案例教程 35_第1张图片

图 26    通过ArcGIS的IDE插件添加自定义Functionality

下面我们需要对新生成的这个Functionality类进行编码以实现自己的功能:
public class Zoom5Functionality implements GISFunctionality
{
    private GISResource resource;
    public void zoomIn5()
    {
        WebContext webContext = resource.getWebContext();
        webContext.getWebMap().getCurrentExtent().expand(0.2);
        webContext.refresh();
    }
    public void zoomOut5()
    {
        WebContext webContext = resource.getWebContext();
        webContext.getWebMap().getCurrentExtent().expand(5);
        webContext.refresh();
    }
    public void initFunctionality(GISResource resource){this.resource = resource;    }
    public void destroyFunctionality()    {}
    public GISResource getResource()    {return this.resource;}
}
这样,这个Zoom5Functionality就具有了两个功能:zoomIn5和zoomOut5,分别对应了放大地图5倍和缩小地图5倍。接下来就让我们在页面上放一个Command去调用Zoom5Functionality的zoomIn5功能:

           defaultImage="images/tasks/maptools/zoomin.png"
           hoverImage="images/tasks/maptools/zoominU.png"
           selectedImage="images/tasks/maptools/zoominD.png"
           clientPostBack="true" >
   

当然,服务器上还需要一个监听器去处理这个Command的请求,并实际去调用Zoom5Functionality的方法:
public class ZoomInListener implements ActionListener
{
    public void processAction(ActionEvent event) throws AbortProcessingException
    {
        WebContext webContext = WebUtil.getWebContext(event.getComponent());
        GISResource resource = webContext.getResourceById("agswsWorld");
        Zoom5Functionality functionality =
(Zoom5Functionality)resource.getFunctionality("zoom5Functionality");
        functionality.zoomIn5();
    }
}
或许你会觉得这样做有点多此一举,简单的功能干嘛要做一个Functionality来封装一下呢——当然了,这主要是因为这里演示的这个功能实在是太简单了。如果你有复杂的逻辑需要封装,而且还想灵活地配置某些资源需要这个功能,某些资源则不需要,那么Functionality就可以帮你大忙了。
这里还需要特别提一下的就是GISFunctionality的initFunctionality方法,这个方法在Functionality被初始化的时候调用,这个时候其实还可以对GISResource作一些操作,比如根据权限验证来选择需要显示的图层等等。

你可能感兴趣的:(ArcGIS Server Java ADF 案例教程 35)