相同类型的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 = new
TaskToolDescriptor[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