Arcgis Server ADF ajax前后台交互(备忘)

Arcgis Server ADF ajax前后台交互(备忘)

在没有使用使用arcgis server adf之前 我觉得使用ajax是一件so easy的事儿 可是使用adf以前 我感觉相当的郁闷。ok 废话少说,直接进入正题。

场景:我要从后台获得当前视野范围内地图的范围,香港虚拟主机,并通过xml返回给用户。

步骤:

1、写一个类MapExtentListener,让它实现PhaseListener接口。代码如下所示:

package com.esri.adf.web.templates;import java.io.IOException;import java.util.Map;import javax.faces.context.FacesContext;import javax.faces.event.PhaseEvent;import javax.faces.event.PhaseId;import javax.faces.event.PhaseListener;import org.w3c.dom.Document;import org.w3c.dom.Element;import com.esri.adf.web.data.WebContext;import com.esri.adf.web.data.WebMap;import com.esri.adf.web.data.geometry.WebExtent;import com.esri.adf.web.faces.renderkit.xml.ajax.AJAXUtil;import com.esri.adf.web.util.WebUtil;import com.esri.adf.web.util.XMLUtil;/** * 获得地图视野范围* @author likehua * */public class MapExtentListener implements PhaseListener{private static final long serialVersionUID = 1L;@Overridepublic void afterPhase(PhaseEvent arg0) {FacesContext context=arg0.getFacesContext();Map params=context.getExternalContext().getRequestParameterMap();WebContext webContext=WebUtil.getWebContext(context.getViewRoot());WebMap map=webContext.getWebMap();if(params.get(“getMapExtent”)!=null&&params.get(“getMapExtent”).equals(“true”)){WebExtent extent=map.getCurrentExtent();double minx=extent.getMinX();double miny=extent.getMinY();double maxx=extent.getMaxX();double maxy=extent.getMaxY();Document respone=XMLUtil.newDocument();Element mapExtent=XMLUtil.createElement(respone,”MapExtent”,””,null);XMLUtil.createElement(respone, “maxx”, String.valueOf(maxx), mapExtent);XMLUtil.createElement(respone, “minx”, String.valueOf(minx), mapExtent);XMLUtil.createElement(respone, “maxy”, String.valueOf(maxy), mapExtent);XMLUtil.createElement(respone, “miny”, String.valueOf(miny), mapExtent);try {AJAXUtil.writeResponse(context, respone);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{context.responseComplete();}}}@Overridepublic void beforePhase(PhaseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic PhaseId getPhaseId() {// TODO Auto-generated method stubreturn PhaseId.APPLY_REQUEST_VALUES;}}

2、在jsf中配置该类,配置文件(WebContent/WEB-INF/faces-config.xml)如下所示:

<lifecycle><phase-listener>com.esri.adf.web.templates.MapExtentListener</phase-listener> </lifecycle>

3、在前端写一段js代码,向后台发送请求。提起js代码,我又想骂那个天杀的dojo框架+arcgis js api ,香港服务器租用,容量十分庞大,服务器空间,一不小心就让你的IDE挂掉。代码如下:

function requestMapExtent(){var formId = map.formId;var url = adf.Utils.getServerUrl(formId);var params = “getMapExtent=true&” + adf.Utils.buildRequestParams(formId);adf.Utils.sendAjaxRequest(url, params, true, processMapInfo);}function processMapInfo(res){alert(res.responseText);}function getExtent(){map=adf.Controls.maps[‘map1’];requestMapExtent();}

HTML入口:<a href=”javascript:void(0)”>当前地图范围</a>。其他代码省略。

看到这么一个庞然大物,我不禁要问ESRI没落了吗?

posted on

今天不想走,明天就要跑了。

Arcgis Server ADF ajax前后台交互(备忘)

相关文章:

你感兴趣的文章:

标签云: