Server Java 二:利用Ajax得到当前地图的比例尺(服务器端)

现在我们进入实战阶段,看看我们怎么可以在服务器端得到当前地图的范围,这个代码中你将学到如何从faces Context里面得到当前form中的控件,以及如何利用ESRI提高的工具,简化我们响应AJAX请求的过程:
UIComponent form = facesContext.getViewRoot().findComponent((String)paramMap.get(FORMID));
首先我们得到页面上的form,form是一个container,通过它我们可以得到form中的其它组件,比如我们的地图控件:
<a:map id="Map0" value="#{mapContext.webMap}" width="600" height="600" /> 

我们可以用下面的方法得到这个Mapcontrol和WebMap:
  MapControl mc = (MapControl) form.findComponent((String)paramMap.get(MAPID));
  WebMap wm = mc.getWebMap();

得到了这个WebMap,哈哈,可以得到Everything了,因为你可以从WebMap中得到WebContext。这个时候,想得到那个比例尺,是再简单也不过的事情了,用下面的代码即可:
wm.getMapScale();

得到了比例尺了,接下去怎么办呢?把它返回到客户端,我们的Ajax客户端认的是XML的流,咋办呢?最笨的办法当然是是一个一个String的组装成XML,然后调用Response的Write写回到客户端,比如下面的代码:
public String toXml() {
  StringBuffer xml = new StringBuffer();
  xml.append("<?xml version=\"1.0\"?>\n");
  xml.append(“<scale>”);
  xml.append(“<value>100</value>”);
  xml.append("</scale>\n");
  return xml.toString();
}

生成了XML代码,然后用下面的代码把结果返回给客户端:
Response res=(Response)externalContext.getResponse();
res.setContentType("application/xml");
res.getWriter().write(scaleXml);

当然,各位看官想来都是JAVA高手,对于这样的写法实在感觉不舒服,正待想办法用标准的XML工具来写时,你会发现,ESRI已经为您想到了,写好了几个工具类来供你调用了。我们来看看怎么用这些工具:
用下面的代码创建一个标准的XML文档:
Document doc = XMLUtil.newDocument();

用下面的代码新建一个element:
Element responseElement = XMLUtil.createElement(doc, "response", null, null);

用下面的代码将我们的比例尺数据写到刚才新建的Element里面:
XMLUtil.createElement("scale", String.valueOf(wm.getMapScale()), responseElement);

然后用下面的语句将XML文档写入到客户端:
AJAXUtil.writeResponse(facesContext, doc);

很可惜的是,ESRI这些类的代码是不公开的,不过你可以猜一猜,这些方法里面到底发生了什么事情。
OK,皮球又被提到了客户端了,我们下一个讲座来看看,如何解析服务器端返回的XML文档,并且更新页面上的输入框。

你可能感兴趣的:(java,xml,Ajax)