添加命令和工具

继前一讲的ADF工程,那里只有两个工具“放大”和“缩小”以及一个命令“放大到全部”。你可以添加更多的工具和命令到你的Web ADF应用

中,本文介绍如何添加欲定义的工具或命令和自定义的工具和命令。

添加一个命令: 命令是一个触发服务端动作而不需要进一步地客户端交互地JSP页面元素。命令的一个例子是"放大到全部" 按钮。用户一点击该按钮,服务端就执行一个方法。工具在执行一个服务端方法前需要进一步的客户端交互。

Web ADF提供了如下的标准命令:

Zoom to full extent

Zoom to previous extent

Zoom to next extent

Directional pan

Tools

像下面的例子,一个"右移"的命令将添加到应用中显示了如何将添加预定义的命令到Web ADF应用中。"右移"命令允许用户右移地图当用户点击该按钮时。

添加命令的步骤:

在JSP页面中添加标签

为该命令指定"actionListener"

设置该命令标签的属性

这里是一个添加向右移动的例子:

对于"右移"命令,你必须设置"contextId"和"direction"属性并且指定actionListener为"com.esri.adf.web.faces.event.DirectionalPanListener"。其他属性如图片等如果必要也可以加以设置。

添加工具:工具在执行一个服务端方法前需要进一步的客户端交互。工具的一个例子是"框选放大"。用户点击按钮,还要在地图上拖拽一个方框表示欲放大的区域,然后服务端的方法才执行。地图和工具的交互是工具栏必须指定它的关联地图的原因。

工具的clientAction属性指定哪一种客户端脚本被执行。clientAction属性可以取以下的值:

EsriMapCircle

EsriMapContinuousPan

EsriMapLine

EsriMapOval

EsriMapPan

EsriMapPoint

EsriMapPolygon

EsriMapPolyline

EsriMapRectangle

调用的服务端方法可以用serverAction或serverMethod属性指定。serverAction属性需要一个实现com.esri.web.adf.faces.event.MapToolAction接口的Java类的全名。serverMethod属性需要一个绑定接受com.esri.adf.web.faces.event.MapEvent 参数的方法。服务器端的方法用clientPostBack属性设置异步地或者同步地调用。

Web ADF提供了以下标准地工具:

Zoom in

Zoom out

Pan

作为一个例子,一个"移动"工具将加到应用中显示了如何将添加预定义的工具到Web ADF应用中。"移动"命令允许用户移动地图当用户拖拽地图时。

添加工具的步骤:

在页面添加标签

指定"clientAction"和"serverAction"属性

设置工具的其他属性

这里是一个添加移动工具的例子:

selectedImage="images/panD.gif" clientAction="EsriMapPan"

serverAction="com.esri.adf.web.faces.event.PanToolAction" clientPostBack="true"/>

在这个例子中"id"属性是工具的id,"*Image" 属性指定了工具按钮的不同状态的图片。"clientAction" 指定了当用户点击工具按钮的客户端

动作,"serverAction"指定了客户端动作结束后服务器端的动作。最后,"clientPostBack"指定了在这个工具操作中AJAX是否支持。

现在你应该基本了解了Web ADF应用,各个组件如何结合在一起工作,怎么渲染客户端,你可以继续扩展这基本框架,创建自定义的命令和工具。

写自定义命令和工具

这一节将写一个自定义的命令和自定义的工具。自定义的命令将计算一个图层的所有可见的要素个数。 自定义的工具将计算一个图层上框选范围内的所有要素个数。

实现Java类

你必须创建一个实现计算要素逻辑的FeatureCounter类。这个类将使用ArcGIS Server API来计算要素个数,所以它需要一个指向WebContext的引用来取得这个API 。添加一个属性context来保存这个引用,并且添加为它添加getter/setter方法。你待会儿将看到如何初始化这个属性。同样添加一个属性countedFeatures来保存要素个数,并且为它添加getter/setter方法。

这里是这个类刚开始的样子:

package com.mypackage;

public class FeatureCounter {

private WebContext context;

public WebContext getContext() {return context;}

public void setContext(WebContext context) {this.context = context;}

private int countedFeatures;

public int getCountedFeatures() {return countedFeatures};

public void setCountedFeatures(int count) {this.countedFeatures = count;}

}

接下来,添加一个私有方法countFeatures(),接受一个类型为com.esri.adf.web.data.WebContext的参数,该方法将做计算一个范围之内的所有要素的工作,然后把结果存储在属性countedFeatures里。

private void countFeatures(WebExtent extent){

//Get the MapServerPort so we can execute methods through ArcGIS Server API

AGSMapResource agsMap = ((AGSMapResource)context.getResources().get("ags1"));

MapServerPort mapServer = agsMap.getMapServer();

//Make a new envelope from the web extent

EnvelopeN env = new EnvelopeN(extent.getMinX(), extent.getMinY(), extent.getMaxX(), extent.getMaxY(),

null, null, null, null, null);

//Setup a spatial filter for an Intersection relationship

SpatialFilter spatialFilter = new SpatialFilter();

spatialFilter.setSpatialRel(EsriSpatialRelEnum.esriSpatialRelIntersects);

spatialFilter.setWhereClause("");

spatialFilter.setSearchOrder(EsriSearchOrder.esriSearchOrderSpatial);

spatialFilter.setSpatialRelDescription("");

spatialFilter.setGeometryFieldName("");

//Set the envelope as the geometry

spatialFilter.setFilterGeometry(env);

//MapServer::queryFeatureCount() executes on the server and can throw a RemoteException

try{

//Count features in 4th layer which intersect with the envelope

int layerId = 3;

this.countedFeatures =

mapServer.queryFeatureCount(mapServer.getDefaultMapName(), layerId, spatialFilter);

}catch(RemoteException rme){

//Rethrow this as ADFAGSException so that it can participate in the exception framework

throw new ADFAGSException("Could not execute MapServer::queryFeatureCount()",rme);

}

}

现在我们已经有了业务逻辑,你需要添加命令和工具调用的方法。先添加命令的方法,创建一个方法countFeaturesInFullExtent(),不接受任何参数,用代表全范围的WebExtent参数调用countFeatures()。:

public String countFeaturesInFullExtent(){

//Get the full extent

WebExtent fullExtent  = context.getWebMap().getFullExtent()

//Delegate to countFeatures()

this.countFeatures(fullExtent);

//Don't want to navigate to another page

return null;

}

然后,添加工具方法,添加一个方法countFeaturesInRectangle(), 接受一个类型为 com.esri.adf.web.faces.event.MapEvent的参数,然后用代表用户选择范围的WebExtent参数调用countFeatures():

public int countFeaturesInRectange(MapEvent event){

//Get the chosen extent

WebMap webMap = context.getWebMap();

WebExtent chosenExent = (WebExtent) event.getWebGeometry().toMapGeometry(webMap);

//Delegate to countFeatures()

this.countFeatures(chosenExent);

//Don't want to navigate to another page

return null;

}

声明这个Java类作为一个managed-bean。你需要在WEB-INF/faces-config.xml声明FeatureCounter作为managed-bean并且用一个WebContext初始化context属性。

featureCounter

com.mypackage.FeatureCounter

request

webContext

#{mapContext}

在JSP页面添加命令和工具

工具标签必须指定"EsriMapRectangle"作为clientAction属性。这允许用户在地图上画一个方框,该方框被作为MapEvent参数传递给

serverMethod指定的方法:

...

/>

...

....

Feature Count =

utputText value="#{featureCounter.countedFeatures}" rendered="#{featureCounter.countedFeatures >

0}"/>

小结

添加自定义命令或工具的步骤:

1. 创建一个类,添加业务逻辑

2. 声明这个类作为一个managed-bean

3. 添加命令和工具标签到JSP页面中,并绑定managed-bean适当的方法

java adf_Java ADF开发入门-添加命令和工具相关推荐

  1. #java #web jsp开发入门(web应用概述、tomcat简介、编写步骤)

    #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 目录 #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 1.w ...

  2. java基础的开发入门

    一.JDK的安装 二.java程序的开发入门 配置环境变量 运行第一个程序 命令窗口的几个操作   一.JDK的安装 Oracle公司提供了多个操作系统的JDK,不同的操作系统的JDK在使用上基本相似 ...

  3. java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密

    本文将带你了解IOS开发入门之iOS 3DES加密  和 java  3DES 解密,希望本文对大家学ios有所帮助 对称加密算法 3des   在iOS 客户端加密算法 首先进入头文件: #impo ...

  4. 前端开发入门:前端构建工具百度FIS

    FIS是什么? FIS全称为Front-end Integrated Solution,即前端集成解决方案.前端团队发展大多会经历规范设计.技术选型.系统拆分.性能优化等阶段,其中的技术需求可以总结为 ...

  5. 使用Cobra开发自己的命令行工具

    Cobra 项目地址:https://github.com/spf13/cobra 1 新建cobra项目 # 安装cobra-cli工具 go install github.com/spf13/co ...

  6. Revit二次开发入门教程一(工具篇)

    对BIM开发感兴趣的读者可以关注我的BIM开发系列教程 什么是BIM开发?这篇文章可以告诉你 Revit二次开发教程提纲 Revit二次开发编程入门一(工具篇) 前言 BIM诞生的背景 Revit在B ...

  7. java处理图片 adobe_Adobe开发出一个反修图工具 还原人像PS 痕迹

    "这是一个假人,但在网路上有多少自拍可以代表真人?"一些读者在虚拟偶像的讨论下评论了这篇文章. 事实上,在上传照片先进行修图似乎是一种新的"社交礼仪",并且越来 ...

  8. Java ADF开发入门-简单ArcGIS Server Web ADF应用

    转载于:https://www.cnblogs.com/fsyiyun/archive/2009/05/29/3947010.html

  9. ae编程语言as_AE开发 入门教程

    此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: /DeveloperKit/Samples/D ...

最新文章

  1. [Cocoa]深入浅出Cocoa之多线程NSThread
  2. SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑
  3. oracle 次月,Oracle日期查询:季度、月份、星期等时间信息
  4. 一个简洁实用的后台管理系统AWESOME
  5. 代理服务器Tengine的研究与测试
  6. 打印机怎么扫描到电脑_【柯美C360扫描怎么用教程】打印机怎么扫描
  7. Oracle浅谈第一回
  8. Linux基础知识全面总结
  9. EasyRecovery最新免费专业版数据恢复软件
  10. java速算24,java枚举速算24正解集合
  11. MySQL高性能:索引、锁、事务、分库分表如何撑起亿级数据
  12. Could not retrieve transation read-only status server 的解决办法
  13. Python基础知识——变量与运算符
  14. C语言基础 数字统计
  15. 手机访问电脑本地html文件
  16. WEB前端打印使用记录
  17. [附源码]java毕业设计点餐系统论文
  18. ndn-cxx与nfd的安装
  19. 「Python开发者」公号招内容编辑
  20. Python制做动态图

热门文章

  1. 520|用Python绘制自定义照片墙
  2. C语言十进制转换为二进制
  3. 2、springboot-基础知识点
  4. mysql ora01031_as sysdba 出现ORA-01031: insufficient privileges 解决办法
  5. 干货分享丨第五届“大数据安全与隐私计算”学术会议
  6. 小程序微信支付功能逻辑
  7. 卡苹果6plus在线_嘉兴公交“嘉通行”APP上线,公交卡可以在线充值啦!
  8. java毕业设计家庭理财记账系统mybatis+源码+调试部署+系统+数据库+lw
  9. redis 库存秒杀
  10. Cesium基础教程