ARCGIS JSF AJAX實現返回即時比例尺

來源:互聯網
上載者:User

1.arcgis 的地圖控制項是直接支援AJAX的.

如果我們需要在地圖操作時使用AJAX的話可以做如下操作

在body onload 時調用init方法.

 

function init()
            {
             var map = EsriControls.maps["Map0"];
       map.addUpdateListener("request", updateInfoRequest);
            }

 

這樣我們在對地圖進行操作時,就會調用 updateInfoRequest 方法.

 

function updateInfoRequest(){
             var url = EsriUtils.getServerUrl("frmMap");
             var map = EsriControls.maps["Map0"];
             var params = "ajaxdemo=ajaxdemo&mapId=Map0&" + EsriUtils.buildRequestParams(map.formId);
             
             var xmlHttp = EsriUtils.sendAjaxRequest(url,params,true,function()
             { updateInfoResponse(xmlHttp); }); 
       }

 

updateInfoResponse 這個是ajax發送請求時返回時調用的回呼函數.

 

使用這個函數可以實現對我們的介面做更新.

 

function updateInfoResponse(xmlHttp) {
             
      if (xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
     var xml = xmlHttp.responseXML;
     var scale=xml.getElementsByTagName("scale").item(0).firstChild.nodeValue;
        document.getElementById("scale").value = "1:" + scale
    }
   }

 

以上時用戶端的調用

 

服務端又是如何處理呢?

 

我們在服務端可以使用一個實現 PhaseListener 介面的類.

 

 

Ajax生命週期在server上是獨立執行的。這以為著瀏覽器發出一個攜帶一定參數的request並且期望得到一個特定格式的XML response。這個response可以由任何類型的JSF PhaseListeners或者servlet或者甚至是靜態XML檔案。現在我們看看怎樣使用PhaseListener用來處理一個request和返回一個response到瀏覽器。

當瀏覽器使用XMLHttpRequest對象向伺服器發送request,這個request遵循標準的JSF request 處理生命週期。這些components在Restore View phase階段被重建並且它們的狀態在Apply Request values phase階段被更新。因為我們需要這些在頁面上的components被更新,我們跳過PhaseListener.beforePhase()方法的處理。在PhaseListener.afterPhase方法我們處理request和呈現response到用戶端。

 

代碼如下:

 

 

public class AjaxDemoPhaseListener implements PhaseListener {
 
 public PhaseId getPhaseId() {
  // TODO Auto-generated method stub

  //這裡表示在應用請求值階段進行處理
  return PhaseId.APPLY_REQUEST_VALUES;
 }
 public void afterPhase(PhaseEvent phaseEvent) {
  
  FacesContext facesContext = phaseEvent.getFacesContext();
  ExternalContext externalContext = facesContext.getExternalContext();
  Map paramMap = externalContext.getRequestParameterMap();
    
  String formId = (String) paramMap.get("formId");
    
  String mapId=(String)paramMap.get("mapId");

     //這裡判斷是不是我們需要的請求,如果不是直接返回.
     String ajaxdemo=(String) paramMap.get("ajaxdemo");
     if(ajaxdemo==null || !ajaxdemo.equals("ajaxdemo"))
      return;
    
    
    
    
    
     UIComponent form = facesContext.getViewRoot().findComponent(formId);
     MapControl mc = (MapControl) form.findComponent(mapId);
     WebMap wm = mc.getWebMap();
     String scale= String.valueOf(wm.getMapScale());
    
     Document doc = XMLUtil.newDocument();
     Element responseElement = XMLUtil.createElement(doc, "response", null, null);
     XMLUtil.createElement("scale", scale, responseElement);
     try {
   AJAXUtil.writeResponse(facesContext, doc);

   //

   facesContext.responseComplete();
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }

 }
 
 

 public void beforePhase(PhaseEvent phaseEvent) {
  
 }

 

}

 

最後我們在 <lifecycle> 中註冊我們所寫的監聽器.

 

這樣arcgis的ajax使用全過程就完成了

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.