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

ArcGIS Server Java ADF 案例教程 23

2009-04-30 14:56 531 查看
三 Task的渲染

Task的功能类中还有一个属性,IDE默认生成的名字是taskInfo,它对应这个另外一个Java类(如上面QueryTaskTaskInfo类)的对象。这个类主要控制Task的渲染,我们可以回想一下,如果光在Task的功能类中定义了Command是一个void类型的query方法,Task面板怎么会生成一个标签为“查询”的按钮出来的呢?答案就在taskInfo中。

打开上面生成的“QueryTaskTaskInfo.java”文件,我们可以看到以下的内容:

public class QueryTaskTaskInfo extends SimpleTaskInfo

{

public TaskDescriptor getTaskDescriptor()

{

TaskDescriptor descriptor = new TaskDescriptor(QueryTask.class, "queryTask", "查询任务");

return descriptor;

}

public TaskParamDescriptorModel[] getParamDescriptors()

{

TaskParamDescriptor[] descriptors = new TaskParamDescriptor[1];

descriptors[0] = new TaskParamDescriptor(QueryTask.class, "keyWord", "关键词", "getKeyWord", "setKeyWord");

return descriptors;

}

public TaskActionDescriptorModel[] getActionDescriptors()

{

TaskActionDescriptor[] descriptors = new TaskActionDescriptor[1];

descriptors[0] = new TaskActionDescriptor(QueryTask.class, "query", "查询");

return descriptors;

}

public TaskToolDescriptorModel[] getToolDescriptors()

{

TaskToolDescriptor[] descriptors = new TaskToolDescriptor[1];

descriptors[0] = new TaskToolDescriptor(QueryTask.class, "select", "选择", "EsriMapPolygon");

return descriptors;

}

}

简单的说,TaskInfo类中包含4个主要的属性:TaskDescriptor对象、TaskParamDescriptor[]数组、TaskActionDescriptor[]数组、TaskToolDescriptor[]数组。很好理解,TaskDescriptor对应整个Task的外观,比如Task的标题等;TaskParamDescriptor[]描述所有Parameter的外观;TaskActionDescriptor[]描述所有Command的外观;TaskToolDescriptor[]描述所有Tool的外观。一个Task中肯定包含不定数目的Parameter、Command或Tool,因此他们的描述需要数组来存放。

让我们通过TaskToolDescriptor来更详细地看一下,上面的代码设置“select”这个TaskTool表现为一个“选择”按钮,并在点击时通知Map执行“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");

现在我还想调整一下这些按钮、文本框的布局,怎么办?TaskInfo还可以指定Task各个子元素的布局,让我们在刚刚的QueryTaskTaskInfo类中再添加以下的代码:

public TaskLayout[] getTaskLayout()

{

TabularLayout[] descriptors = new TabularLayout[1];

descriptors[0] = new TabularLayout();

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

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

descriptors[0].addComponent(getToolDescriptors()[0], new TabularPosition(2, 0, 0, 0));

return descriptors;

}

经过上面的两次修改,我们会发现Task面板的Tool变成了使用图片渲染,并且布局方式更加我们的定义进行了变化,效果如图 17所示。



图 17 更改Tool渲染方式和布局后的Task面板

顺便回头再看看页面中Task的定义,其中有taskInfo属性,它对应的就是这个Task的TaskInfo对象:

taskInfo="#{queryTask.taskInfo}"

最后稍微总结一下吧,Task的外观主要通过TaskInfo来定义,ADF会根据Task所对应的TaskInfo,通过XSL样式文件渲染成DHTML代码,并输出到浏览器。到现在为止,一个Task面板包含什么内容、对应后台什么对象、怎么控制它们的表现,你应该都清楚了吧?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: