相同類型的button和tools組合在一起,組成一個邏輯單元,這就是tasks。Tasks跟tools一樣,也是一個普通的Java類即可。
編寫一個task可以分為以下幾個步驟:
1.編寫task類,包含待用command或tool功能。
2.編寫taskinfo類,配置task命令和參數的屬性。
3.在faces-config.xml中進行配置
4.在頁面上進行調用
本文記錄編寫一個task的過程,其上包括一個文字查詢功能(含參數)和一個拉框放大功能。
1:編寫task類
task類package com.demo;import java.util.Collection;import java.util.List;import java.util.Map;import com.esri.adf.web.ags.data.AGSMapResource;import com.esri.adf.web.data.WebContext;import com.esri.adf.web.data.geometry.WebExtent;import com.esri.adf.web.data.geometry.WebGeometry;import com.esri.adf.web.data.query.QueryResult;import com.esri.adf.web.data.query.TextCriteria;import com.esri.adf.web.data.query.WebQuery;import com.esri.adf.web.faces.event.MapEvent;import com.esri.adf.web.faces.event.TaskEvent;/** * 測試用task * 無需實現其它介面 */public class MyTask {//文字查詢所需參數String parameter;public String getParameter() {return parameter;}public void setParameter(String parameter) {this.parameter = parameter;}/** * 文字查詢 * 不與地圖互動,參數為TaskEvent */public void query(TaskEvent event) {WebContext context = event.getWebContext(); AGSMapResource res = (AGSMapResource) context.getResources().get("agsws1"); TextCriteria tc = new TextCriteria(); tc.setSearchText(this.parameter); WebQuery query = (WebQuery) context.getAttribute("query"); List layer = context.getWebQuery().getQueryLayers(); List results = query.query(tc, layer); for (int i = 0; i < results.size(); i++) { QueryResult result = (QueryResult) results.get(i); result.highlight(); Map map = result.getDetails(); map.size(); Collection col = map.values(); Object[] obj = col.toArray(); for (int j = 0; j < obj.length; j++) { System.out.println(obj[j]); } } }/** * 通過和地圖互動進行放大 * 與地圖互動,參數為MapEvent */public void zoomIn(MapEvent te) {WebContext ctx = te.getWebContext();WebGeometry geom = te.getWebGeometry().toMapGeometry(ctx.getWebMap());WebExtent ext = (WebExtent)geom;ctx.getWebMap().setCurrentExtent(ext);ctx.refresh();}}
2:編寫taskinfo類:
taskinfo類package com.demo;import com.esri.adf.web.data.tasks.SimpleTaskInfo;import com.esri.adf.web.data.tasks.TaskActionDescriptor;import com.esri.adf.web.data.tasks.TaskActionDescriptorModel;import com.esri.adf.web.data.tasks.TaskDescriptor;import com.esri.adf.web.data.tasks.TaskParamDescriptor;import com.esri.adf.web.data.tasks.TaskParamDescriptorModel;import com.esri.adf.web.data.tasks.TaskToolDescriptor;import com.esri.adf.web.data.tasks.TaskToolDescriptorModel;import com.esri.adf.web.faces.event.ClientActions;/** * MyTask的taskinfo類 * 繼承自SimpleTaskInfo,重寫方法以設定各參數 */public class MyTaskInfo extends SimpleTaskInfo {/** * 設定task名稱 */public TaskDescriptor getTaskDescriptor() {TaskDescriptor td = new TaskDescriptor(MyTask.class);td.setDisplayName("我的工作");return td;}/** * 設定tool類型按鈕參數 * 重寫getToolDescriptors方法 */public TaskToolDescriptorModel[] getToolDescriptors() {TaskToolDescriptor[] toolDesAry = newTaskToolDescriptor[1];//設定放大tool的顯示名稱和用戶端動作類型TaskToolDescriptor toolDesc = new TaskToolDescriptor(MyTask.class, "zoomIn", "互動放大",ClientActions.MAP_RECTANGLE);toolDesAry[0] = toolDesc;return toolDesAry;}/** * 設定command類型按鈕參數 * 重寫getActionDescriptors方法 */public TaskActionDescriptorModel[] getActionDescriptors() {TaskActionDescriptorModel[] td = new TaskActionDescriptorModel[1];//設定查詢command的顯示名稱TaskActionDescriptorModel actionDesc = new TaskActionDescriptor(MyTask.class, "query", "查詢");td[0] = actionDesc;return td;}/** * 設定各參數的顯示名稱 * 重寫getParamDescriptors方法 */public TaskParamDescriptorModel[] getParamDescriptors() {TaskParamDescriptorModel[] td = new TaskParamDescriptorModel[1];//設定查詢所需參數的顯示名稱TaskParamDescriptorModel paraDesc = new TaskParamDescriptor(MyTask.class, "parameter", "查詢文本");td[0] = paraDesc;return td;}}
3:在faces-config.xml中進行配置
查詢--配置 <managed-bean> <managed-bean-name>mapContext</managed-bean-name> <managed-bean-class>com.esri.adf.web.data.WebContext</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>attributes</property-name> <map-entries> <map-entry> <key>query</key> <value>#{webappQuery}</value> </map-entry><map-entry><key>graphics</key><value>#{graphics}</value></map-entry> ...<!--WebQuery聲明 --> <managed-bean> <managed-bean-name>webappQuery</managed-bean-name> <managed-bean-class>com.esri.adf.web.data.query.WebQuery</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> <managed-property> <property-name>layerDefinitions</property-name> <list-entries> <value>#{arcgis_localmapgrid2_usa_2d_v_layer1}</value> .... </list-entries> </managed-property> </managed-bean>
<managed-bean>
<managed-bean-name>MyTask</managed-bean-name>
<managed-bean-class>com.demo.MyTask</managed-bean-class>
<managed-bean-scope>session </managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>MyTaskInfo</managed-bean-name>
<managed-bean-class>com.demo.MyTaskInfo</managed-bean-class>
<managed-bean-scope>session </managed-bean-scope>
</managed-bean>
4.在頁面上進行調用
<a:task mapId="Map0" value="#{MyTask}" rendered="true" taskInfo="#{MyTaskInfo}" />
參考:
空間查詢及屬性文字查詢的代碼
Server Java講座-----擴充Tasks架構(一)
Server Java講座----Task架構擴充之Taskinfo