隨筆-18  評論-20  文章-0  trackbacks-0



          Tasks框架是一個很有意思的東西。如果你對Tasks框架還沒有概念,你可以參考一下web map application那個Sample,左邊浮動的放大工具,查詢工具都是用Tasks框架構成。有人會問,既然已經有了commandtools,為什么還需要tasks呢?事實上tasks的目的是不同的;我們可以看一下web map application,可以看到,相同類型的buttontoos組合在一起,組成一個邏輯單元,這就是tasks的選擇條件。

          我們來看看如何編寫Tasks,編寫Tasks是非常有意思的事情。Taskstools一樣,也是一個普通的Java類即可,這個Java類可以從Object直接繼承。請看下面的Task的例子:


           

          1public class JSTasks {
          2public void doSomething(){
          3System.out.println("Task button clicked.");
          4                                  
          5}

          6}

          這個tasks實在是簡單吧,看看怎么部署上去,我們在xml文件中做如下定義:


           

          1 <managed-bean>
          2        <managed-bean-name>jsTask</managed-bean-name>
          3        <managed-bean-class>com.cj.ucdemo.JSTasks</managed-bean-class>
          4        <managed-bean-scope>session</managed-bean-scope>
          5  </managed-bean>

          這個配置文件也非常簡單,那么看來所有的訣竅在與如何在JSP頁面里面使用它。我們來看看:

           

          1<a:task mapId="Map0" value="#{jsTask}"   rendered="true" />


          添加一個task標簽,把這個標簽的mapId值指向地圖控件”Map0”,講它的值指向我們剛才定義的Managed Bean。訪問一下,大家看看下面的浮動窗口結果:


           

          是不是很令人驚奇啊?事實上我們這個Bean中只有一個方法,但是Tasks框架聰明地把這個方法名給提取出來,作為button的名字。你點擊一下這個按鈕,在后臺就可以看到執行了這個方法,打印出了一條信息。簡單的說:方法就是按鈕!!

          有了上個Task的基礎, 我們來看其它的Task就駕輕就熟了。事實上,整個Task就是一個類,Task的Caption就是這個類的類名。里面的每一個Public方法都是Task浮動條上的一個按鈕。那么參數怎么辦呢?我們來加一個參數,并且加上一個它的get方法和set方法:

           

          1String parameter;
          2public String getParameter() {
          3return parameter;
          4}

          5public void setParameter(String parameter) {
          6this.parameter = parameter;
          7}


           看看我們的task工具條發生了什么變化,Task工具條如下圖所示:



          可以看到,多了一個Parameter的輸入框,前面還有一個Label,很有意思吧。那個DoAnything是我加的另外一個方法。Task框架的擴展已經很明顯了吧:把相同的功能集合在一個類里面,這個類可以接受參數。例如我們可以利用這個task進行buffer操作,這個輸入框就可以用來輸入buffer的距離。

          看到這里,大家肯定想到了另外的幾個問題,比如:怎么把這些參數,按鈕的名字修改成中文,上次給人培訓,有人說:用中文的變量名?也是一個辦法,但是考慮的JDK對中文變量的處理,似乎有問題。還有其它的問題包括怎么跟地圖進行交互?怎么樣設置客戶端的動作(畫多邊形還是畫Polyline)。我們當然有另外的方法。

          使用Taksinfo建立對Task的描述,所有的Taskinfo都需要繼承自SimpleTaskInfo類。大家可以打開doc看看SimpleTaskInfo的子類有那些。事實上,那些子類都是已經存在的task的taskinfo,如果你需要做漢化,繼承這些類并且改寫其中的幾個方法即可。

          我們來看看我們自己的類需要改寫SimpleTaskInfo的哪幾個方法:
          TaskActionDescriptorModel[]getActionDescriptors();

          此方法用來修改command按鈕的描述;command的意思是不需要和地圖進行交互而是直接在服務器端執行一個命令。

          TaskParamDescriptorModel[]getParamDescriptors()

          此方法修改參數的描述;

          TaskToolDescriptorModel[]getToolDescriptors();

          此方法修改工具的描述,工具的意思是需要和地圖進行交互;

          那么我們來寫一個類,直接說明如何使用這幾個方法,修改task的表現:

          public TaskDescriptor getTaskDescriptor() {

          TaskDescriptor td=new TaskDescriptor(JSTasks.class);

          td.setDisplayName("我的任務");

          return td;

          }


          此方法修改了task的標題,將此類作為一個Managed-bean添加到faces-config.xml文件中,并且在.jsp頁面中修改task的使用如下:

          <a:task mapId="Map0"  value="#{jsTask}" rendered="true" taskInfo="#{jsTaskInfo}"/>


          修改后的Task如下所示:



          可以看到
          task的標題已經改變。下面我們來看修改Action的標題,代碼如下:



          public TaskActionDescriptorModel[]

          getActionDescriptors() {

          TaskActionDescriptorModel[] td=new TaskActionDescriptorModel[1];

          TaskActionDescriptorModel actionDesc=new TaskActionDescriptor(JSTasks.class,"doSomething","查詢");

          td[0]=actionDesc;

          return td;

          }


          需要說明的是TaskActionDescriptor(JSTasks.class,"doSomething","查詢")構造函數的三個參數,第一個是task類,第二個是方法名,第三個是修改后的方法名;構造后放到數組中返回即可,如果有多個方法,可以如法炮制,都放到數組中。修改后的task有如下表現:



          你會發現另外一個action沒有了,別著急,因為我們還沒有把它放到數組中,而原來默認的顯示方式已經被我們修改了。

          我們來修改doAnything工具,doAnything工具需要和地圖交互,注意它的參數是MapEvent而不是TaskEvent,它完整的代碼如下所示:

          public void doAnything(MapEvent te){

          //通過和地圖交互進行放大

          WebContext ctx=te.getWebContext();

          WebGeometry geom=te.getWebGeometry().toMapGeometry(ctx.getWebMap());

          WebExtent ext = (WebExtent)geom;

          ctx.getWebMap().setCurrentExtent(ext);

          ctx.refresh();

          }



          如果跟地圖交互,就要涉及到客戶端執行的操作,我們這里沒有任何地方指定客戶端的操作,這是在taskinfo里面指定的,我們來看下面的代碼:

          public TaskToolDescriptorModel[]

          getToolDescriptors() {

          TaskToolDescriptor [] toolDesAry=new

          TaskToolDescriptor[1];

          TaskToolDescriptor toolDesc=new

          TaskToolDescriptor(JSTasks.class, "doAnything", "交互放大",ClientActions.MAP_RECTANGLE);

          toolDesAry[0]=toolDesc;

          return toolDesAry;

          }


          注意TaskToolDescriptor構造函數的4個參數,第一個是task類,第二個是原方法名,第三個是替換后的方法名,第四個是客戶端的動作。構造完成后放到數組中,如果有多個tools,如法炮制即可。修改后的task如下所示:



          有了上面的解釋,我們來看參數的taskinfo代碼,就非常容易了:

          public TaskParamDescriptorModel[] getParamDescriptors() {

          // TODO Auto-generated method stub

          TaskParamDescriptorModel[] td=new TaskParamDescriptorModel[1];

          TaskParamDescriptorModel paraDesc=new TaskParamDescriptor(SearchTask.class,"searchText","查詢文本");

          td[0]=paraDesc;

          return td;

          }


          修改后的task如下所示:



          Task
          框架的基本構成就是這樣了,祝大家使用愉快。下節將介紹TaskResult的使用。

           

          posted on 2007-08-16 11:01 JavaPoint 閱讀(1927) 評論(8)  編輯  收藏 所屬分類: ArcGis

          評論:
          # re: Server Java講座-----擴展Tasks框架 2007-10-11 16:05 | ss
          期待TaskResult的介紹說明哈 呵呵  回復  更多評論
            
          # re: Server Java講座-----擴展Tasks框架 2007-10-16 16:41 | anty
          TaskResult??  回復  更多評論
            
          # re: Server Java講座-----擴展Tasks框架[未登錄] 2007-10-18 13:56 | dd
          用模板生成的,會有tasks,Results,Result details ……   回復  更多評論
            
          # re: Server Java講座-----擴展Tasks框架[未登錄] 2007-11-13 14:03 | tree
          不錯,很好!~我是剛學arcgis server java web adf開發的,請你講解下arcgis標簽屬性的意思,好嗎?有關于這方面的書籍嗎?介紹下!~  回復  更多評論
            
          # re: Server Java講座-----擴展Tasks框架 2007-11-30 11:58 | 一個問題
          為什么button這個按鈕出不來,可是輸入框已經出來了,是不是還有什么地方要設置?  回復  更多評論
            
          # re: Server Java講座-----擴展Tasks框架[未登錄] 2007-12-12 10:16 | bright
          講的比看英文爽多了,很簡潔,又清晰,呵呵,期待更多的好文章  回復  更多評論
            
          # re: Server Java講座-----擴展Tasks框架[未登錄] 2007-12-12 10:31 | bright
          請問,關于參數的taskinfo代碼
          public TaskParamDescriptorModel[] getParamDescriptors() {

          // TODO Auto-generated method stub

          TaskParamDescriptorModel[] td=new TaskParamDescriptorModel[1];

          TaskParamDescriptorModel paraDesc=new TaskParamDescriptor(SearchTask.class,"searchText","查詢文本");

          td[0]=paraDesc;

          return td;

          }

          為什么是SearchTask.class?這個參數parameter不是
          JSTasks類中的嗎?TaskParamDescriptorModel paraDesc=new TaskParamDescriptor(SearchTask.class,"searchText","查詢文本");是不應該是TaskParamDescriptorModel paraDesc=new TaskParamDescriptor(JSTasks.class,"parameter","查詢文本");  回復  更多評論
            
          # re: Server Java講座-----擴展Tasks框架[未登錄] 2008-06-25 15:41 | terry
          哥們,你寫的對不?我怎么按你寫的,只能出來dosomething,并且也不能變成中文,,,  回復  更多評論
            
          主站蜘蛛池模板: 青阳县| 铁岭市| 象州县| 湾仔区| 娄烦县| 桂林市| 汤原县| 南部县| 越西县| 赤水市| 车险| 墨玉县| 安新县| 和硕县| 甘肃省| 永州市| 东兰县| 金华市| 阳泉市| 鹤庆县| 衡阳县| 文成县| 武功县| 济宁市| 尚义县| 台前县| 金塔县| 井冈山市| 莎车县| 巴东县| 尚义县| 永丰县| 广元市| 乐东| 天镇县| 霍邱县| 云安县| 金秀| 治多县| 财经| 邮箱|