ArcGIS Server Java –自訂task

來源:互聯網
上載者:User

相同類型的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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.