我是靠谱客的博主 痴情白开水,最近开发中收集的这篇文章主要介绍java调用arcgis接口_ArcGis server 调用Javascript API实现与后台的参数传递,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.在页面端,首先撰写自定义的javascript方法,有了这个方法,就可以在前端页面的任何地方去触发地图事件了:

function test(str){

//需要传递到后台的自定义参数

var str1=encodeURI(encodeURI(str));

//“mapForm”是地图页面上的表单名,从该表单获取向后台提交的URL

var url = EsriUtils.getServerUrl("mapForm");

//“map1”是地图页面上的地图ID

var map = EsriControls.maps["map1"];

//定义需要传递的参数列表,最后的“EsriUtils.buildRequestParams(map.formId)”为固定写法

var params = "addpointInt=addpointInt";//这个参数用来在后台判断当前应该做什么操作,从而决定调用哪个处理类,参数名和值都是自定义的

params += " &mapId=map1 ";//地图的ID

params += " &str="+str1;//自定义的参数

params += " &"+EsriUtils.buildRequestParams(map.formId);//固定写法

//调用sendAjaxRequest方法,发送请求,其中的function(){testCallBack(xmlHttp);}为回调方法

var xmlHttp = EsriUtils.sendAjaxRequest(url,params,true,function(){testCallBack(xmlHttp);});

}

2.然后是相关的回调方法,回调方法就可以根据自己的需要随意进行操作了,这只是非常普通的AJAX回调方法

function testCallBack(xmlHttp){

if (xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200) {

var xml = xmlHttp.responseXML;

var map = EsriControls.maps["map1"];

// map.refresh();

// alert("run here");

map.resize(map.bounds.width, map.bounds.height);

}

}

3.然后是撰写后台程序,用以捕捉前台所触发的AJAX事件。这是一个listener,需要实现接口javax.faces.event.PhaseListener:

import java.util.Map;

import javax.faces.context.ExternalContext;

import javax.faces.context.FacesContext;

import javax.faces.event.PhaseEvent;

import javax.faces.event.PhaseId;

import javax.faces.event.PhaseListener;

public class SelfPhaseListener implements PhaseListener {

//ajax处理代码

public PhaseId getPhaseId() {

// TODO Auto-generated method stub

//这里表示在应用请求值阶段进行处理

return PhaseId.APPLY_REQUEST_VALUES;//.APPLY_REQUEST_VALUES;//选择action的回调处理过程

}

public void afterPhase(PhaseEvent phaseEvent) {

//从FacesContext中获得由前端javascript方法传递来的参数列表

FacesContext facesContext = phaseEvent.getFacesContext();

ExternalContext externalContext = facesContext.getExternalContext();

Map paramMap = externalContext.getRequestParameterMap();

//这里判断是不是我们需要的请求,如果不是直接返回。这个“addpointInt”即是先前所定义的javasctipt方法中的一个参数

if("addpointInt".equals((String) paramMap.get("addpointInt"))){

//这个AddPointPhaseListener类就是自定义的用来进行后台处理的类

AddPointPhaseListener addpoint=new AddPointPhaseListener();

addpoint.excute(paramMap, facesContext);

}

}

@Override

public void beforePhase(PhaseEvent arg0) {

// TODO Auto-generated method stub

}

}

4.接下来写一个用来处理具体业务的类:

import java.util.Map;

import javax.faces.component.UIComponent;

import javax.faces.context.FacesContext;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import com.esri.adf.web.data.TocFunctionality;

import com.esri.adf.web.data.WebContext;

import com.esri.adf.web.data.WebMap;

import com.esri.adf.web.faces.component.MapControl;

import com.esri.adf.web.faces.renderkit.xml.ajax.AJAXUtil;

import com.esri.adf.web.util.XMLUtil;

public class AddPointPhaseListener {

@SuppressWarnings("deprecation")

public void excute(Map paramMap,FacesContext facesContext) {

try {

//get form element from view。获得页面上的表单对象

UIComponent form = facesContext.getViewRoot().findComponent((String) paramMap.get("mapForm"));

if(form == null){

return;

}

//get map control。获得mapControl

MapControl mc = (MapControl) form.findComponent((String) paramMap.get("mapId"));

if(mc == null){

return;

}

//get web map, web context & clear graphics。获得WebMap,WebContext,就可以进行地图操作了

WebMap wm = mc.getWebMap();

WebContext wc = wm.getWebContext();

wc.getWebQuery().clearGraphics();

// read information form string of js function

//获得从页面javasctipt方法传递来的参数列表

String str=java.net.URLDecoder.decode((String) paramMap.get("str"), "UTF-8");

///

//如果需要返回的话,像这样用XML的形式返回数据

//create and populate xml response document

Document doc = XMLUtil.newDocument();

Element responseTag = XMLUtil.createElement(doc, "response", null, null);

responseTag.setAttribute("test", "hello");

//write response

AJAXUtil.writeResponse(facesContext, doc);

}

catch (Exception e) {

}

finally {

facesContext.responseComplete();

}

}

}

5.最后,需要在faces-context.xml文件中通过注册生命周期的方式,来使以上这些代码生效:

com.esri.adf.web.templates.MapViewerPhaseListener

com.megait.gis.listener.SelfPhaseListener

posted on 2009-11-25 15:58 棋剑小秋 阅读(1196) 评论(0)  编辑  收藏 所属分类: GIS

最后

以上就是痴情白开水为你收集整理的java调用arcgis接口_ArcGis server 调用Javascript API实现与后台的参数传递的全部内容,希望文章能够帮你解决java调用arcgis接口_ArcGis server 调用Javascript API实现与后台的参数传递所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部