您的位置:首页 > 编程语言 > Java开发

Java ADF 运行原理剖析(2)

2010-05-28 20:26 316 查看
Task是实现业务逻辑的重要部分。Task可以让用户输入参数,通过Command和Tools的组合,完成任务,返回结果。Task过Command+Tools简单相加之处在于Task提供了一个多样化组合的面板。

A.Parameter String keyword

B.Command void方法 query(TaskEvent event)

C.Tool void方法 select(MapEvent event)

A 定义了传递的参数 B.Command命令,通过TaskEvent获取消息,C.Tool工具,通过MapEvent捕获消息。下面以CustomTask和CustomTaskInfo为例,分析Task整个实现过程。

CustomTask.Java关键代码:

public class CustomTask {

private String layoutType;

private Map<String,String> layoutOptions;

private CustomTaskInfo taskInfo = new CustomTaskInfo();

private String keyWord;

public void query(TaskEvent event) {

WebContext webContext = event.getWebContext();

WebQuery webQuery = (WebQuery) webContext.getAttribute("query");

TextCriteria textCriteria = new TextCriteria();

textCriteria.setMaxRecordCount(100);

textCriteria.setSearchText(this.keyWord);

List<QueryResult> listQueryResult = webQuery.query(textCriteria,

webQuery.getQueryLayers());

webContext.getWebGraphics().clearGraphics();

for (int i = 0; i < listQueryResult.size(); i++) {

QueryResult queryResult = listQueryResult.get(i);

queryResult.highlight();

}

webContext.refresh();

}

public void select (MapEvent event){

WebContext webContext = event.getWebContext();

WebGeometry webGeometry = (WebPolygon) event.getWebGeometry().toMapGeometry(webContext.getWebMap());

WebQuery webQuery = (WebQuery) webContext.getAttribute("query");

List<WebLayerInfo> layers = webQuery.getQueryLayers();

List<WebLayerInfo> queryLayers = new ArrayList<WebLayerInfo>();

for (WebLayerInfo layer : layers){

if (layer.getName().equals("QXZF")){

queryLayers.add(layer); break;

}

}

IdentifyCriteria identifyCriteria = new IdentifyCriteria();

identifyCriteria.setWebGeometry(webGeometry);

List<QueryResult> listQueryResult = webQuery.query(identifyCriteria, queryLayers);

//---------------------------高亮显示-------------------------

/* webContext.getWebGraphics().clearGraphics();

for (int i = 0; i < listQueryResult.size(); i++) {

QueryResult queryResult = listQueryResult.get(i);

queryResult.highlight();

}

webContext.refresh();

*/

//---------------------WebSimpleMarkerSymbol---------------------

/*WebSimpleMarkerSymbol symbol = new WebSimpleMarkerSymbol();

symbol.setMarkerType(WebSimpleMarkerSymbol.CIRCLE);

symbol.setAntialiasing(true);

symbol.setTransparency(0.7);

symbol.setColor("255,255,0");

symbol.setOutlineColor("255,0,0");*/

//---------------------WebPictureMarkerSymbol--------------------

/*WebPictureMarkerSymbol symbol = new WebPictureMarkerSymbol();

symbol.setFileName("images/esri-logo.gif");*/

//---------------------WebTrueTypeMarkerSymbol-------------------

WebTrueTypeMarkerSymbol symbol=new WebTrueTypeMarkerSymbol();

symbol.setFontName("ESRI Business");

symbol.setCharacterIndex(0);

symbol.setFontColor("0,255,0");

symbol.setFontSize(50);

symbol.setFontStyle(WebTrueTypeMarkerSymbol.UNDERLINE);

webContext.getWebGraphics().clearGraphics();

for (int i = 0; i < listQueryResult.size(); i++){

QueryResult queryResult = listQueryResult.get(i);

GraphicElement element = new GraphicElement();

element.setGeometry(queryResult.getHighlightGeometry());

element.setSymbol(symbol);

webContext.getWebGraphics().addGraphics(element);

}

}

}

以上是一段以两种不同方式查询显示的代码,public void query(TaskEvent event) 通过输入参数,对选择的数据集高亮显示。public void select (MapEvent event)相对复杂一些,根据选定图层,定义了以多边形框选取的方式,得到数据集,除了进行简单的高亮显示之外,还采取的其他的符号化方式,标注部分为不同符号化代码。

CustomTaskInfo.Java代码片段:

public class CustomTaskInfo extends SimpleTaskInfo{

TabularLayout[] layouts = new TabularLayout[1];

//任务面板外观描述

public TaskDescriptor getTaskDescriptor() {

TaskDescriptor descriptor = new TaskDescriptor(CustomTask.class,

"queryTask", "Custom Task");

return descriptor;

}

public TaskToolDescriptorModel[] getToolDescriptors() {

TaskToolDescriptor[] descriptors = new TaskToolDescriptor[1];

descriptors[0] = new TaskToolDescriptor(CustomTask.class, "select",

"选择", "EsriMapPolygon");

descriptors[0].setRendererType(TaskToolDescriptor.IMAGE_RENDERER_TYPE);

descriptors[0].setDefaultImage("images/tasks/maptools/polygon.gif");

descriptors[0].setHoverImage("images/tasks/maptools/polygonU.gif");

descriptors[0].setSelectedImage("images/tasks/maptools/polygonD.gif");

descriptors[0].setDisabledImage("images/tasks/maptools/polygonX.gif");

return descriptors;

}

public TaskParamDescriptorModel[] getParamDescriptors() {

TaskParamDescriptor[] descriptors = new TaskParamDescriptor[2];

descriptors[0] = new TaskParamDescriptor(CustomTask.class, "keyWord",

"关键词", "getKeyWord", "setKeyWord");

descriptors[1] = new TaskParamDescriptor(CustomTask.class,"layoutType","布局","getLayoutOptions");

descriptors[1].setRendererType(TaskParamDescriptor.SELECT_RENDERER_TYPE);

return descriptors;

}

public TaskActionDescriptorModel[] getActionDescriptors() {

TaskActionDescriptor[] descriptors = new TaskActionDescriptor[2];

descriptors[0] = new TaskActionDescriptor(CustomTask.class, "query",

"查询");

descriptors[1] = new TaskActionDescriptor(CustomTask.class,"changeLayout","布局切换");

return descriptors;

}

public TaskLayout[] getTaskLayout() {

layouts[0] = new TabularLayout();

layouts[0].addComponent(getParamDescriptors()[1], new TabularPosition(0,0,1,1));

layouts[0].addComponent(getActionDescriptors()[1], new TabularPosition(0,1,1,1));

layouts[0].addComponent(getParamDescriptors()[0], new TabularPosition(1,0,1,1));

layouts[0].addComponent(getActionDescriptors()[0], new TabularPosition(1,1,1,1));

layouts[0].addComponent(getToolDescriptors()[0], new TabularPosition(1,1,1,0));

return layouts;

}

CustomTaskInfo.Java为我们定义了Task面板的样式,public TaskDescriptor getTaskDescriptor()定义了面板的整体外观,并且关联了处理该面板事物的CustomTask类。

public TaskToolDescriptorModel[] getToolDescriptors()定义了工具样式,该函数返回值为数组类型,可以添加多个工具样式。

public TaskParamDescriptorModel[] getParamDescriptors() 也是以返回数组的形式,它提供描述所有参数的样式,如以文本形式还是以列表选择的方式。

public TaskActionDescriptorModel[] getActionDescriptors() 描述所有命令按钮的样式,设置按钮名称,添加回调函数。

public TaskLayout[] getTaskLayout()

最后在getTaskLayout中添加前面定义的面板元素,这样一个完整的Task就生成了。

当然以上只是后台部分的内容,在faces-config配置文件中,可以看到一下配置信息:

<map-entry>

<key>queryTask</key>

<value>#{queryTask}</value>

</map-entry>

<managed-bean>

<managed-bean-name>queryTask</managed-bean-name>

<managed-bean-class>com.esri.adf.web.developer.CustomTask</managed-bean-class>

<managed-bean-scope>none</managed-bean-scope>

</managed-bean>

以上配置文件,注册了CustomTask 这bean,名称为queryTask,queryTask又被添加到MapContext属性的列表中。

最后就剩下了前台部分,代码如下:

<a:task id="queryTask"

taskInfo="#{queryTask.taskInfo}"

mapId="map1" clientPostBack="true"

windowingSupport="true"

value="#{mapContext.attributes.queryTask}" />

完成整个工作,部署工程,运行,下面为示例图(1):



输入南京,单击查询Command按钮,后台调用query函数,结果高亮显示。

通过Tool,多边形选取,目标要素以符号化的形式显示。

如下图(2):



以上就是一个Task基本功能的完成展示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: