http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcGIS Server >> 正文

ArcGIS Server Java 开发实战---自定义command

作者:flyingis    文章来源:http://www.blogjava.net/flyingis/    点击数:    更新时间:2009-12-21
摘要:命令事实上是command,也就是平常所在html页面里面的command,这些command里面就是命令按钮。在我们的ArcGIS Server的Web ADF里面,command被用来做一些不用跟地图交互的工作;比如缩放到全图:你不需要跟地图做任何交互,只要一按按钮,地图就缩放到全图。其它用处,就靠大家去发挥想象了,相信大家在以后的项目中会经常用到。
这个文档大家如果喜欢看英文,在ESRI的帮助里面就有。本文和ESRI的帮助文档类似,当然,我写的会加入自己的一些东西。

咱开发人员拿到一个开发平台,当然是要用来开发的,而且我们最好把它改得面目全非,才能显出开发人员我的水平所在。对于那些拿着模版生成一个web gis站点就去问客户要钱的事情,对于一个有自尊的开发人员,一般是不屑做的。

所以,我们今天就讲讲如何自定义命令和工具,先说说自定义命令吧。

命令事实上是command,也就是平常所在html页面里面的command,这些command里面就是命令按钮。在我们的ArcGIS ServerWeb ADF里面,command被用来做一些不用跟地图交互的工作;比如缩放到全图:你不需要跟地图做任何交互,只要一按按钮,地图就缩放到全图。其它用处,就靠大家去发挥想象了,相信大家在以后的项目中会经常用到。我们以一个例子作为说明:
  1. package com.demo;
  2. import javax.faces.event.ActionEvent;
  3. import com.esri.adf.web.data.WebContext;
  4. import com.esri.adf.web.data.geometry.WebExtent;
  5. import com.esri.adf.web.faces.event.MapEvent;
  6. import com.esri.adf.web.faces.event.MapToolAction;
  7. public class MyFullExtent {
  8. WebContext context;

  9. public WebContext getContext() {
  10. return context;
  11. }
  12. public void setContext(WebContext context) {
  13. this.context = context;
  14. }
  15.                                                                                     
  16. public void setFullExtent(){
  17. try{
  18. WebExtent ex=context.getWebMap().getFullExtent();
  19. context.getWebMap().setCurrentExtent(ex);
  20. context.refresh();

  21. }catch(Exception ex){
  22. ex.printStackTrace();
  23. }
  24. }
  25. }

这是无比简单的一个command,简单到我都不好意思发出来给大家看了。注意这个类没有实现任何接口,也没有扩展任何现有的类,除了祖宗Object。它有一个WebContext,从上面一个讲座我们可以知道,这个类可是我们整个Web ADF的关键,有了它,可以得到所有的东西了。
这个类关键的方法是setFullExtent,里面的几行代码用来将地图缩放到全图,大家看看代码应该就可以明白。

怎么进行部署呢?就像普通的managed bean一样进行部署就可以了,打开jsf application的心脏faces-config.xml文件,在里面添加如下配置:
  1. <managed-bean>
  2.         <managed-bean-name>myFullExtent</managed-bean-name>
  3.         <managed-bean-class>com.demo. MyFullExtent </managed-bean-class>
  4.         <managed-bean-scope>session</managed-bean-scope>
  5.         <managed-property>
  6.           <property-name>context</property-name>
  7.           <value>#{mapContext}</value>
  8.         </managed-property>
  9.   </managed-bean>


注意我们把web context作为一个属性,用来初始化MyFullExtent,#{mapContext}指向了一个在faces-config.xml文件中定义的另外一个Bean,这个bean我们上次讲座已经详细解释过了。这里说一句废话,算是提醒一下,有请求过来的时候,先实例化这个类,然后再设置属性,有的工程师想在实例化里面进行一些操作,就必要用webContext,会报告空指针错误,因为这个时候webContext属性还没有被设置。

类写好了,也配置好了,怎么用呢,再给个例子:
  1. <a:command id="fullExtent" action="#{myFullExtent. setFullExtent }" toolText="全图显示" />

自定义command就这样完成了。

Tags:ArcGIS Server,Java,command  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图