java adf_Java ADF开发入门-添加命令和工具
添加命令和工具
继前一讲的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开发入门-添加命令和工具相关推荐
- #java #web jsp开发入门(web应用概述、tomcat简介、编写步骤)
#java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 目录 #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 1.w ...
- java基础的开发入门
一.JDK的安装 二.java程序的开发入门 配置环境变量 运行第一个程序 命令窗口的几个操作 一.JDK的安装 Oracle公司提供了多个操作系统的JDK,不同的操作系统的JDK在使用上基本相似 ...
- java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密
本文将带你了解IOS开发入门之iOS 3DES加密 和 java 3DES 解密,希望本文对大家学ios有所帮助 对称加密算法 3des 在iOS 客户端加密算法 首先进入头文件: #impo ...
- 前端开发入门:前端构建工具百度FIS
FIS是什么? FIS全称为Front-end Integrated Solution,即前端集成解决方案.前端团队发展大多会经历规范设计.技术选型.系统拆分.性能优化等阶段,其中的技术需求可以总结为 ...
- 使用Cobra开发自己的命令行工具
Cobra 项目地址:https://github.com/spf13/cobra 1 新建cobra项目 # 安装cobra-cli工具 go install github.com/spf13/co ...
- Revit二次开发入门教程一(工具篇)
对BIM开发感兴趣的读者可以关注我的BIM开发系列教程 什么是BIM开发?这篇文章可以告诉你 Revit二次开发教程提纲 Revit二次开发编程入门一(工具篇) 前言 BIM诞生的背景 Revit在B ...
- java处理图片 adobe_Adobe开发出一个反修图工具 还原人像PS 痕迹
"这是一个假人,但在网路上有多少自拍可以代表真人?"一些读者在虚拟偶像的讨论下评论了这篇文章. 事实上,在上传照片先进行修图似乎是一种新的"社交礼仪",并且越来 ...
- Java ADF开发入门-简单ArcGIS Server Web ADF应用
转载于:https://www.cnblogs.com/fsyiyun/archive/2009/05/29/3947010.html
- ae编程语言as_AE开发 入门教程
此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: /DeveloperKit/Samples/D ...
最新文章
- [Cocoa]深入浅出Cocoa之多线程NSThread
- SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑
- oracle 次月,Oracle日期查询:季度、月份、星期等时间信息
- 一个简洁实用的后台管理系统AWESOME
- 代理服务器Tengine的研究与测试
- 打印机怎么扫描到电脑_【柯美C360扫描怎么用教程】打印机怎么扫描
- Oracle浅谈第一回
- Linux基础知识全面总结
- EasyRecovery最新免费专业版数据恢复软件
- java速算24,java枚举速算24正解集合
- MySQL高性能:索引、锁、事务、分库分表如何撑起亿级数据
- Could not retrieve transation read-only status server 的解决办法
- Python基础知识——变量与运算符
- C语言基础 数字统计
- 手机访问电脑本地html文件
- WEB前端打印使用记录
- [附源码]java毕业设计点餐系统论文
- ndn-cxx与nfd的安装
- 「Python开发者」公号招内容编辑
- Python制做动态图
热门文章
- 520|用Python绘制自定义照片墙
- C语言十进制转换为二进制
- 2、springboot-基础知识点
- mysql ora01031_as sysdba 出现ORA-01031: insufficient privileges 解决办法
- 干货分享丨第五届“大数据安全与隐私计算”学术会议
- 小程序微信支付功能逻辑
- 卡苹果6plus在线_嘉兴公交“嘉通行”APP上线,公交卡可以在线充值啦!
- java毕业设计家庭理财记账系统mybatis+源码+调试部署+系统+数据库+lw
- redis 库存秒杀
- Cesium基础教程