在这个小节,我们去实现一个GISFunctionality去封装前面实现过的使地图放大5倍的功能。
首先,当然是新建一个Functionality类并添加到ADF应用中去。前面我们经常通过直接编辑代码的方式去定义类和配置文件,这主要是为了帮助你理解ADF应用的配置和各个元素的相互关系。现在估计你也有一定了解了,我们也就尽量省事些,多使用ArcGIS的eclipse插件去完成这些工作吧。
让我们打开eclipse的菜单【ArcGIS】-【Class Templates】-【Functionality】,在新建的窗口上填上我们希望实现的Functionality的包名、类名、实例化 Managed Bean的名称、注册到的Resource等,完成以后ADF会自动新建一个实现GISFunctionality接口的类,并把这个类实例化后注册到 ADF应用的配置文件中去。
图 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功能:
<a:command id="zoomIn"
defaultImage="images/tasks/maptools/zoomin.png"
hoverImage="images/tasks/maptools/zoominU.png"
selectedImage="images/tasks/maptools/zoominD.png"
clientPostBack="true" >
<f:actionListener type="wuyf.ZoomInListener"/>
</a:command>
当然,服务器上还需要一个监听器去处理这个Command的请求,并实际去调用Zoom5Functionality的方法:
public class ZoomInListener implements ActionListener
{
public void processAction(ActionEvent event) throws AbortProcessingException
{
WebContext webContext = WebUtil.getWebContext(event.getComponent());
GISResource resource = webContext.getResourceById("agsws1");
Zoom5Functionality functionality =
(Zoom5Functionality)resource.getFunctionality("zoom5Functionality");
functionality.zoomIn5();
}
}
或许你会觉得这样做有点多此一举,简单的功能干嘛要做一个Functionality来封装一下呢——当然了,这主要是因为这里演示的这个功能实在是太简单了。如果你有复杂的逻辑需要封装,而且还想灵活地配置某些资源需要这个功能,某些资源则不需要,那么Functionality就可以帮你大忙了。
这里还需要特别提一下的就是GISFunctionality的initFunctionality方法,这个方法在Functionality被初始化的时候调用,这个时候其实还可以对GISResource作一些操作,比如根据权限验证来选择需要显示的图层等等。
本文转自:
其他相关链接: