该程序功能的实现过程大致是这样的:
在更新地图范围时,通过向服务器发送AJAX请求,在后台实现该特定请求的监听,获取相应的地图信息后,通过XML形式返回客户端,客户端也实现了相应的JS函数利用返回的xmlhttp参数对浏览页面进行更新。
首先需要给地图控件添加监听器,当指定事件发生时调用指定函数处理该业务功能,这段初始化的JS函数需要在body的load事件发生时即调用,JS代码如下:
![]()
, processMapInfo);
}
接下来在服务端定义监听器JAVA类,需要实现PhaseListener接口,代码如下所示:
;
import com.esri.adf.web.faces.renderkit.xml.ajax.AJAXUtil;
public class MapUpdatePhaseListener
implements PhaseListener
{
public PhaseId getPhaseId()
{
return PhaseId.APPLY_REQUEST_VALUES;
}
public void beforePhase(PhaseEvent event)
{
// do nothing
}
public void afterPhase(PhaseEvent event)
{
FacesContext facesContext = event.getFacesContext();
Map params = facesContext.getExternalContext().getRequestParameterMap();
WebContext webContext = WebUtil.getWebContext(facesContext.getViewRoot());
WebMap webMap = webContext.getWebMap();
if("true".equals(params.get("getMapInfo")))
{
WebExtent webExtent = webMap.getCurrentExtent();
double xmin = webExtent.getMinX();
double ymin = webExtent.getMinY();
double xmax = webExtent.getMaxX();
double ymax = webExtent.getMaxY();
double scale = webMap.getMapScale();
Document doc = XMLUtil.newDocument();
Element mapinfo = XMLUtil.createElement(doc, "mapinfo", "", null);
XMLUtil.createElement(doc, "xmin", String.valueOf(xmin), mapinfo);
XMLUtil.createElement(doc, "ymin", String.valueOf(ymin), mapinfo);
XMLUtil.createElement(doc, "xmax", String.valueOf(xmax), mapinfo);
XMLUtil.createElement(doc, "ymax", String.valueOf(ymax), mapinfo);
XMLUtil.createElement(doc, "scale", String.valueOf(scale), mapinfo);
try
{
AJAXUtil.writeResponse(facesContext, doc);
}
catch(IOException ex)
{
ex.printStackTrace();
}
finally
{
facesContext.responseComplete();
}
}
}
}
然后在faces-config.xml文件中进行注册
<lifecycle>
<phase-listener>com.igsnrr.MapUpdatePhaseListener</phase-listener>
</lifecycle>
最后一步既是实现分析返回的xml结果的JS函数,更新页面进行显示,代码如下:
![]()
scale;
}
}
按照上述步骤依次完成后,即可运行程序,查看效果图,如下所示: