小秋的家

home

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  1 Posts :: 91 Stories :: 17 Comments :: 0 Trackbacks
使用ArcGIS Server Java ADF  Manager创建的Web Application中提供一个通用的工具条,包含默认的8个地图工具(包括4个Tool和4个Command).
打开模版产生的mapviewer.jsp文件,在第37行我们可以看到这个工具条的定义:

<a:task id="mapToolsTask" value="#{mapToolsTask}" taskInfo="#{mapToolsTask.taskInfo}" mapId="map1" windowingSupport="false" style="padding:0px;margin:0px;"
xslFile="maptoolstask.xsl"/>

我们发现,它并不是由a:toolbar和a:tool定义的,而是一个封装好的mapToolsTask对象。
通过查看faces-config.xml,我们看到mapToolsTask的定义如下:


<managed-bean>
<managed-bean-name>mapToolsTask</managed-bean-name>
<managed-bean-class>com.esri.adf.web.tasks.MapToolsTask</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>webContext</property-name>
<value>#{mapContext}</value>
</managed-property>
</managed-bean>

事实上,mapToolsTask是在ArcGIS Server Java ADF 中已经封装好的com.esri.adf.web.tasks.MapToolsTask的一个实例。
类似于自定义Task的过程中实现TaskInfo的方法,我们可以也可以通过为这个mapToolsTask实现一个TaskInfo来达到定制的目的。倍感方便的是,在ArcGIS Server Java ADF 也同样封装好了一个
com.esri.adf.web.tasks.MapToolsTaskInfo的类,我们只需继承这个类再修改其中的配置即可,举个最简单的例子:
1.新建一个类MyToolsTaskInfo,继承自com.esri.adf.web.tasks.MapToolsTaskInfo,

package com.jerry.ags;
import com.esri.adf.web.tasks.MapToolsTaskInfo;
import com.esri.adf.web.tasks.MapToolsTaskConfig;
public class MyToolsTaskInfo extends MapToolsTaskInfo{
public MyToolsTaskInfo(){
  MapToolsTaskConfig tc=new MapToolsTaskConfig();
  tc.setTools("IDENTIFY,ZOOMIN,ZOOMOUT,");
  super.setTaskConfig(tc);
}
}

在这个简单的例子中只包含一个构造函数,在构造函数中我们首先创建一个import com.esri.adf.web.tasks.MapToolsTaskConfig的实例,并调用它的setTools方法,意为在工具条中只包
含"IDENTIFY,ZOOMIN,ZOOMOUT"三个工具。最后通过调用基类的setTaskConfig方法将这个com.esri.adf.web.tasks.MapToolsTaskConfig实例生效。
2.在face-config.xml文件中添加如下配置:

<managed-bean>
<managed-bean-name>myToolsTaskInfo</managed-bean-name>
<managed-bean-class>com.jerry.ags.MyToolsTaskInfo</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

3.修改mapviewer.jsp文件第37行工具条的定义中taskInfo属性的值

<a:task id="mapToolsTask" value="#{mapToolsTask}" taskInfo="#{myToolsTaskInfo}" mapId="map1" windowingSupport="false" style="padding:0px;margin0px;"
xslFile="maptoolstask.xsl"/>

4.重新部署并启动应用,我们看到工具条中就只出现三个工具,依次是IDENTIFY-ZOOMIN-ZOOMOUT

补充
1.相信定制模版应用的工具条还有更为灵活的方法,比如直接自定义Tool,Command,并通过a:toolbar,a:tool,a:command等标签定义来替代a:task。可以参考与这部分内容相关的资料。

2.MapToolsTaskInfo继承自com.esri.adf.web.data.tasks.SimpleTaskInfo,因而可以通过实现TaskInfo接口中定义的getActionDescriptors(),getToolDescriptors()等方法进行更复杂的定制。
比如,我们希望修改点击查询为拉框查询,可以修改MyToolsTaskInfo 的实现程序如下:

package com.jerry.ags;
import com.esri.adf.web.tasks.MapToolsTaskInfo;
import com.esri.adf.web.tasks.MapToolsTaskConfig;
import com.esri.adf.web.data.tasks.TaskToolDescriptorModel;
import com.esri.adf.web.data.tasks.TaskToolDescriptor;
import com.esri.adf.web.faces.event.ClientActions;
import com.esri.adf.web.tasks.MapToolsTask;
public class MyToolsTaskInfo extends MapToolsTaskInfo{
private TaskToolDescriptor[] taskTools=new TaskToolDescriptor[3];
public MyToolsTaskInfo(){
  MapToolsTaskConfig tc=new MapToolsTaskConfig();
  tc.setTools("IDENTIFY,ZOOMIN,ZOOMOUT,");
  super.setTaskConfig(tc);
 
  taskTools[0]=new TaskToolDescriptor(MapToolsTask.class,"identify","拉框查询",ClientActions.MAP_RECTANGLE);
  taskTools[0].setRendererType(TaskToolDescriptor.IMAGE_RENDERER_TYPE);
  taskTools[0].setDefaultImage("http://jerry:8000/gs/images/tasks/maptools/identify.png");
  taskTools[0].setSelectedImage("http://jerry:8000/gs/images/tasks/maptools/identifyD.png");
  taskTools[0].setHoverImage("http://jerry:8000/gs/images/tasks/maptools/identifyU.png");


  taskTools[1]=new TaskToolDescriptor(MapToolsTask.class,"zoomIn","放大",ClientActions.MAP_RECTANGLE);
  taskTools[1].setRendererType(TaskToolDescriptor.IMAGE_RENDERER_TYPE);
  taskTools[1].setDefaultImage("http://jerry:8000/gs/images/tasks/maptools/zoomin.png");
  taskTools[1].setSelectedImage("http://jerry:8000/gs/images/tasks/maptools/zoominD.png");
  taskTools[1].setHoverImage("http://jerry:8000/gs/images/tasks/maptools/zoominU.png");
 

  taskTools[2]=new TaskToolDescriptor(MapToolsTask.class,"zoomOut","缩小",ClientActions.MAP_RECTANGLE);
  taskTools[2].setRendererType(TaskToolDescriptor.IMAGE_RENDERER_TYPE);
  taskTools[2].setDefaultImage("http://jerry:8000/gs/images/tasks/maptools/zoomout.png");
  taskTools[2].setSelectedImage("http://jerry:8000/gs/images/tasks/maptools/zoomoutD.png");
  taskTools[2].setHoverImage("http://jerry:8000/gs/images/tasks/maptools/zoomoutU.png");
}

public TaskToolDescriptorModel[] getToolDescriptors(){
  return taskTools;
}

}

注意其中的taskTools[0]=new TaskToolDescriptor(MapToolsTask.class,"identify","拉框查询",ClientActions.MAP_RECTANGLE);

posted on 2008-03-04 16:17 棋剑小秋 阅读(1145) 评论(2)  编辑  收藏 所属分类: GIS

Feedback

# re: 如何定制ArcGIS Server Java ADF 应用模版(一)--定制工具条[未登录] 2009-04-29 16:55 菜鸟
taskTools[0].setDefaultImage("http://jerry:8000/gs/images/tasks/maptools/identify.png");
不可以的,需要把jerry:8000/gs/去掉  回复  更多评论
  

# re: 如何定制ArcGIS Server Java ADF 应用模版(一)--定制工具条 2009-06-03 01:02 刘建民
照着试了试,成功了,对初学者很有帮助!谢谢!  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: