今天我們來講講如何自定義Functionality,自定義Functionality有很多用處。它最大的用處是可以訪問數(shù)據(jù)源。我們來看看已經(jīng)存在的Functionality:
AGSMapFunctionality, AIMSMapFunctionality, AWSMapFunctionality, EJBMapFunctionality, WMSMapFunctionality等等等等,查看GISFunctionality接口的子類你可以看到ADF中更多的Functionality。
這些Functionality無一不跟后臺的資源有關(guān)。我們來看看Functionality接口的定義:
每個functionality都需要實現(xiàn)Functionality這個接口,這個接口里面有三個方法,初始化方法,destroy方法和得到資源的方法。GISResource對應(yīng)于一個特定的資源,比如我們最常用的資源就是AGSLocalMapResource,當然也可以是ArcIMS的Resource,取決于你把這個functionality注冊到哪個Resource中。我們來看一個例子,雖然Functionality一般跟資源有關(guān),但是也可以做其它的事情,比如我們這里舉一個非常簡單的例子,F(xiàn)ixedZoomin:
非常簡單的一個例子,從GISResource里面得到WebContext,然后得到WebMap,修改WebMap的Extent,放大功能就實現(xiàn)了。你說非得跟資源有關(guān)系,那么確實也有點關(guān)系,因為我們還是使用了后臺的數(shù)據(jù)來進行操作。需要說明的是,我們這個代碼對于所有的Resource都是適用的,不管你后臺使用了ArcIMS,還是其它的Resource。ADF的妙處也在這里。
寫好了這個Funcionality,那么我們來看看如何部署的,每一個Functionality都需要部署到某個Resource中,那么我來看一下,這個functionality如何來部署:
部署完成了,如何使用呢?隨便在你的一個tools里面,或者task的運行代碼里面,添加下面的代碼:
就可以了。這只是一個簡單的例子,而且是繞了一個遠的例子。大家可以發(fā)掘一下Functionlity的使用方法。在下一次講座中,我們將詳細解釋一個對Resource進行操作的例子。
AGSMapFunctionality, AIMSMapFunctionality, AWSMapFunctionality, EJBMapFunctionality, WMSMapFunctionality等等等等,查看GISFunctionality接口的子類你可以看到ADF中更多的Functionality。
這些Functionality無一不跟后臺的資源有關(guān)。我們來看看Functionality接口的定義:
public void initFunctionality(GISResource arg0) {} public void destroyFunctionality() {} public GISResource getResource() { return null; }
每個functionality都需要實現(xiàn)Functionality這個接口,這個接口里面有三個方法,初始化方法,destroy方法和得到資源的方法。GISResource對應(yīng)于一個特定的資源,比如我們最常用的資源就是AGSLocalMapResource,當然也可以是ArcIMS的Resource,取決于你把這個functionality注冊到哪個Resource中。我們來看一個例子,雖然Functionality一般跟資源有關(guān),但是也可以做其它的事情,比如我們這里舉一個非常簡單的例子,F(xiàn)ixedZoomin:
public class DemoFunction implements GISFunctionality { WebContext ctx; public void zoomInFunction(){ WebMap wmap = ctx.getWebMap(); WebExtent ext = wmap.getCurrentExtent(); ext.expand(0.5); wmap.setCurrentExtent(ext); ctx.refresh(); } public void initFunctionality(GISResource arg0) { ctx=arg0.getWebContext(); System.out.print("Demo Function inited"); } public void destroyFunctionality() { System.out.print("Demo Function destroyed"); } public GISResource getResource() { return null; } }
非常簡單的一個例子,從GISResource里面得到WebContext,然后得到WebMap,修改WebMap的Extent,放大功能就實現(xiàn)了。你說非得跟資源有關(guān)系,那么確實也有點關(guān)系,因為我們還是使用了后臺的數(shù)據(jù)來進行操作。需要說明的是,我們這個代碼對于所有的Resource都是適用的,不管你后臺使用了ArcIMS,還是其它的Resource。ADF的妙處也在這里。
寫好了這個Funcionality,那么我們來看看如何部署的,每一個Functionality都需要部署到某個Resource中,那么我來看一下,這個functionality如何來部署:
<managed-bean> <managed-bean-name>ags1</managed-bean-name> <managed-bean-class>com.esri.adf.web.ags.data.AGSLocalMapResource</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> <managed-property> <property-name>functionalities</property-name> <map-entries> <!--……略去其它的functionality-> <map-entry> <key>demoFunction</key> <value>#{demoFunction}</value> </map-entry> </map-entries> </managed-property> </managed-bean>
部署完成了,如何使用呢?隨便在你的一個tools里面,或者task的運行代碼里面,添加下面的代碼:
GISResource rec=(GISResource)evt.getWebContext().getResources().get("ags1"); DemoFunction df=(DemoFunction)rec.getFunctionality("demoFunction"); df.zoomInFunction();
就可以了。這只是一個簡單的例子,而且是繞了一個遠的例子。大家可以發(fā)掘一下Functionlity的使用方法。在下一次講座中,我們將詳細解釋一個對Resource進行操作的例子。

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
