Arcgis Server ADF ajax前后台交互(备忘)
2012-10-18 21:06
435 查看
在没有使用使用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; @Override public 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&¶ms.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 block e.printStackTrace(); }finally{ context.responseComplete(); } } } @Override public void beforePhase(PhaseEvent arg0) { // TODO Auto-generated method stub } @Override public PhaseId getPhaseId() { // TODO Auto-generated method stub return 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)" onclick="getExtent()">当前地图范围</a> 。其他代码省略。
看到这么一个庞然大物,我不禁要问ESRI没落了吗?
相关文章推荐
- ArcGIS Server .NET ADF中的AJAX之深入浅出/CallbackResult详解
- ArcGIS Server .NET ADF中的AJAX之深入浅出/CallbackResult详解
- ArcGIS Server .Net ADF中的AJAX
- (转)ArcGIS Server .NET ADF中的AJAX之深入浅出/CallbackResult详解
- Esri中国社区 » GIS大讲堂:ArcGIS Server .Net ADF中的AJAX
- ArcGIS.Server.9.3.DotNet的ADF与ASP.NET AJAX
- TP5中ajax与后台数据的交互
- web前端——ajax提交后台controller实现前端后台交互(1) 传单个参数
- ajax与后台交互传输数据的工具类
- Ajax+jquery 的前后台交互学习
- Ajax与后台之间交互注意的数据类型转换
- Ajax在.NET中与Server控件的交互C#
- ArcGIS Server Java ADF 案例教程 13
- AJAX--前后台交互
- jQuery.ajax与后台服务交互的几种类型使用示例
- arcgis Server .net adf中的选择操作
- Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行
- AJAX+REA实现前后台数据交互的加密解密
- ajax与java后台交互
- 【转】关于arcgis server ADF的几种超时