『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

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

ArcGIS Server Java 开发实战---自定义command
命令事实上是command,也就是平常所在html页面里面的command,这些command里面就是命令按钮。在我们的ArcGIS Server的Web ADF里面,command被用来做一些不用跟地图交互的工作;比如缩放到全图:你不需要跟地图做任何交互,只要一按按钮,地图就缩放到全图。其它用处,就靠大家去发挥想象了,相信大家在以后的项目中会经常用到。

       这个文档大家如果喜欢看英文,在ESRI的帮助里面就有。本文和ESRI的帮助文档类似,当然,我写的会加入自己的一些东西。

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

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

       命令事实上是command,也就是平常所在html页面里面的command,这些command里面就是命令按钮。在我们的ArcGIS ServerWeb ADF里面,command被用来做一些不用跟地图交互的工作;比如缩放到全图:你不需要跟地图做任何交互,只要一按按钮,地图就缩放到全图。其它用处,就靠大家去发挥想象了,相信大家在以后的项目中会经常用到。我们以一个例子作为说明:

       package com.demo;

       import javax.faces.event.ActionEvent;

       import com.esri.adf.web.data.WebContext;

       import com.esri.adf.web.data.geometry.WebExtent;

       import com.esri.adf.web.faces.event.MapEvent;

       import com.esri.adf.web.faces.event.MapToolAction;

       public class MyFullExtent {

       WebContext context;

 

       public WebContext getContext() {

       return context;

       }

       public void setContext(WebContext context) {

       this.context = context;

       }

                                                                                    

       public void setFullExtent(){

       try{

       WebExtent ex=context.getWebMap().getFullExtent();

       context.getWebMap().setCurrentExtent(ex);

       context.refresh();

 

       }catch(Exception ex){

       ex.printStackTrace();

       }

       }

       }

       这是无比简单的一个command,简单到我都不好意思发出来给大家看了。注意这个类没有实现任何接口,也没有扩展任何现有的类,除了祖宗Object。它有一个WebContext,从上面一个讲座我们可以知道,这个类可是我们整个Web ADF的关键,有了它,可以得到所有的东西了。

       这个类关键的方法是setFullExtent,里面的几行代码用来将地图缩放到全图,大家看看代码应该就可以明白。

       怎么进行部署呢?就像普通的managed bean一样进行部署就可以了,打开jsf application的心脏faces-config.xml文件,在里面添加如下配置:

       <managed-bean>

       <managed-bean-name>myFullExtent</managed-bean-name>

       <managed-bean-class>com.demo. MyFullExtent </managed-bean-class>

       <managed-bean-scope>session</managed-bean-scope>

       <managed-property>

       <property-name>context</property-name>

       <value>#{mapContext}</value>

       </managed-property>

       </managed-bean>

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

       类写好了,也配置好了,怎么用呢,再给个例子:

       <a:command id="fullExtent" action="#{myFullExtent. setFullExtent }" toolText="全图显示" />

       自定义command就这样完成了。

      京ICP备2025132830号-1 京公网安备 号