2009年4月20日星期一

ArcGIS Server Java ADF 案例教程 14

Command、Tool和Button

这一章我们将讨论的主要对象是Toolbar的孩子们和亲戚,涉及到两个孩子:Command和Tool,还有一个亲戚:Button。它们是基于ADF对WebGIS功能进行扩展的第一步,它可以让你在地图工具条中加入若干自定义的按钮来执行特定的功能。

在第三章中我们把Toolbar列为ADF常用组件之一,但是它和Map、TOC、Overview等其它组件是有区别的,我们打开“context-attributes.xml”配置文件可以发现,Map、TOC、Overview等组件都有相应的JavaBean定义,但是Toolbar没有——因为它不需要在服务器端绑定一个“WebToolbar”对象来记录Toolbar的状态信息。

下面让我们分别来看看这些组件的用法吧。

一 Command
Command在Toolbar中表现为一个按钮,当用户点击这个按钮以后,ADF将会立即执行一些操作。点击Command相当于直接给ADF一个命令,它并不改变当前地图的状态,比如当前地图正在进行漫游,点击Command以后再对地图进行操作时它还是漫游状态。

最典型的Command比如“地图全图”功能,当用户点击以后,当前地图会缩放到全图显示。下面的代码定义了这样一个Command。

从这段代码我们可以看到,Command的最关键的用法在于定义其子元素“f:actionListener”,它的“type”属性指向一个实现了某些功能的监听器类(注意,并不是对象)。这里的“ZoomFullExtentListener”是ADF自带的监听器;当然,这个类也可以是任何实现了ActionListener 接口的类,我们在后面的案例会实现我们自己的监听器类。

下面我们再来看两个稍微有点不同的Command定义。这两个Command的功能是提供两个按钮“后退”、“前进”,当点击“后退”时地图会返回到上一视图范围;当点击“前进”时地图会前进到后一视图范围。下面的代码定义了这样两个Command。

这里并没有使用监听器,而是使用了Command的action属性。这个属性将绑定一个服务器端对象的方法,当点击这个Command的时候,ADF会去调用这个服务器端方法。“后退”、“前进”的功能主要使用了ADF中的ExtentHistory 对象,它可以维护地图的视图范围历史记录。下面它是在“context-attributes.xml”中的定义:

当我们点击“后退”按钮的时候,ADF会调用这个服务器端“history”对象的doPrevious方法,因此地图会切换到上一视图;点击“前进”也是类似。另外,这两个Command的disabled属性分别绑定到“history”对象的canUndo和canRedo属性,这也很好理解,当地图已经是最新的视图的时候,用户当然应该不可以点击“前进”这个按钮,此时“history”的canRedo属性值为TRUE,因此“前进”这个按钮会呈现不可用的状态。

稍微总结一下,上面主要介绍了Command的两种定义用法,一种定义监听器类作为Command的子元素;另外一种绑定服务器端方法到Command的action属性。对于自定义Command来说,一般使用监听器会比较容易一些。

没有评论: