如何定制ArcGIS Server Java ADF 應(yīng)用模版(一)--定制工具條
|
使用ArcGIS Server Java ADF Manager創(chuàng)建的Web Application中提供一個(gè)通用的工具條,包含默認(rèn)的8個(gè)地圖工具(包括4個(gè)Tool和4個(gè)Command). 打開模版產(chǎn)生的mapviewer.jsp文件,在第37行我們可以看到這個(gè)工具條的定義: CODE:
<a:task id="mapToolsTask" value="#{mapToolsTask}" taskInfo="#{mapToolsTask.taskInfo}" mapId="map1" windowingSupport="false" style="padding:0px;margin:0px;"
xslFile="maptoolstask.xsl"/> 我們發(fā)現(xiàn),它并不是由a:toolbar和a:tool定義的,而是一個(gè)封裝好的mapToolsTask對(duì)象。 通過查看faces-config.xml,我們看到mapToolsTask的定義如下: CODE:
<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> 事實(shí)上,mapToolsTask是在ArcGIS Server Java ADF 中已經(jīng)封裝好的com.esri.adf.web.tasks.MapToolsTask的一個(gè)實(shí)例。 類似于自定義Task的過程中實(shí)現(xiàn)TaskInfo的方法,我們可以也可以通過為這個(gè)mapToolsTask實(shí)現(xiàn)一個(gè)TaskInfo來達(dá)到定制的目的。倍感方便的是,在ArcGIS Server Java ADF 也同樣封裝好了一個(gè) com.esri.adf.web.tasks.MapToolsTaskInfo的類,我們只需繼承這個(gè)類再修改其中的配置即可,舉個(gè)最簡(jiǎn)單的例子: 1.新建一個(gè)類MyToolsTaskInfo,繼承自com.esri.adf.web.tasks.MapToolsTaskInfo, CODE:
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); } } 在這個(gè)簡(jiǎn)單的例子中只包含一個(gè)構(gòu)造函數(shù),在構(gòu)造函數(shù)中我們首先創(chuàng)建一個(gè)import com.esri.adf.web.tasks.MapToolsTaskConfig的實(shí)例,并調(diào)用它的setTools方法,意為在工具條中只包 含"IDENTIFY,ZOOMIN,ZOOMOUT"三個(gè)工具。最后通過調(diào)用基類的setTaskConfig方法將這個(gè)com.esri.adf.web.tasks.MapToolsTaskConfig實(shí)例生效。 2.在face-config.xml文件中添加如下配置: CODE:
<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屬性的值 CODE:
<a:task id="mapToolsTask" value="#{mapToolsTask}" taskInfo="#{myToolsTaskInfo}" mapId="map1" windowingSupport="false" style="padding:0px;margin0px;"
xslFile="maptoolstask.xsl"/> 4.重新部署并啟動(dòng)應(yīng)用,我們看到工具條中就只出現(xiàn)三個(gè)工具,依次是IDENTIFY-ZOOMIN-ZOOMOUT 補(bǔ)充 1.相信定制模版應(yīng)用的工具條還有更為靈活的方法,比如直接自定義Tool,Command,并通過a:toolbar,a:tool,a:command等標(biāo)簽定義來替代a:task。可以參考與這部分內(nèi)容相關(guān)的資料。 2.MapToolsTaskInfo繼承自com.esri.adf.web.data.tasks.SimpleTaskInfo,因而可以通過實(shí)現(xiàn)TaskInfo接口中定義的getActionDescriptors(),getToolDescriptors()等方法進(jìn)行更復(fù)雜的定制。 比如,我們希望修改點(diǎn)擊查詢?yōu)槔虿樵儯梢孕薷腗yToolsTaskInfo 的實(shí)現(xiàn)程序如下: 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); |