ArcServer的Ajax实现(3)
继续看看,继续写写,加深记忆。
这个就刚刚解决上面的那个问题,但真没有手头的这个系统源码,让我看帮助就看懂,得看到明年去。
Custom AJAXRenderers 它有什么优点呢?目前还不知道。
(1)JSP文件
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
Map Information :
<table>
<tbody>
<tr>
<td>MinX :</td>
<td>
<span id="minx"></span>
</td>
</tr>
<tr>
<td>MinY :</td>
<td>
<span id="miny"></span>
</td>
</tr>
<tr>
<td>MaxX :</td>
<td>
<span id="maxx"></span>
</td>
</tr>
<tr>
<td>MaxY :</td>
<td>
<span id="maxy"></span>
</td>
</tr>
<tr>
<td>Scale :</td>
<td>
<span id="map-scale"></span>
</td>
</tr>
</tbody>(2)JS文件
这次就要在Init中增加
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
function Init(){
//alert("dviewInit");
//关闭所有Task
closeTaskWindows();
//初始化属性提示
initHoverTips();
//初始化上下左右平移
initNavAndSlider();
//空间数据查询返回 [windowTip.js]
EsriControls.addPostBackTagHandler("returnTipValue", windowTipResultHandler11);
//空间数据管理-->选择要素
EsriControls.addPostBackTagHandler("selectAllLayerValue", selectAllLayer);
//空间结果返回 高亮显示 [flashGraphics.js]
var map = EsriControls.maps[mapId];
var cont = map.imageGrid.appendChild(document.createElement("div"));
cont.id="flashGraphics_Div";
EsriUtils.setElementStyle(cont,"position:absolute; left:0px; top:0px;z-index:999;");
initFlashGraphics("mygraphics",cont,500);
EsriControls.addPostBackTagHandler("flashfeatureset",flashElementHandler);
//地图测量
EsriControls.addPostBackTagHandler("MeasureCoordinateResult", measureCoordinate);
}
3、Java文件
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
public class FlashQueryResultRenderer implements AJAXRenderer{
public Class getControlClass() {
// TODO Auto-generated method stub
return MapControl.class;
}
public Object getOriginalState(UIComponent arg0) {
// TODO Auto-generated method stub
return null;
}
public void renderAjaxResponse(FacesContext facesContext, UIComponent component,
Object status, boolean isEventSource, Element parent) {
WebContext wctx = ((MapControl)component).getWebMap().getWebContext();
List rs = (List)wctx.getWebSession().getAttribute("flashQueryResult");
if(rs != null){
FlashQueryResultRenderer.appendQueryResult(parent, rs, wctx);
wctx.getWebSession().setAttribute("flashQueryResult",null);
}
}
public static void appendQueryResult(Element parent, List rs,WebContext ctx){
Iterator iter = rs.iterator();
Element flashElem = XMLUtil.createElement("flashfeatureset", "", parent);
while(iter.hasNext()){
QueryResult item = (QueryResult)iter.next();
WebGeometry geom = item.getHighlightGeometry().fromMapGeometry(ctx.getWebMap());
if(geom instanceof WebPoint){
WebPoint point = (WebPoint)geom;
Element ptElem = XMLUtil.createElement("point", "", flashElem);
ptElem.setAttribute("x", String.valueOf(point.getX()));
ptElem.setAttribute("y", String.valueOf(point.getY()));
}else if(geom instanceof WebPolygon){
WebPolygon polygon = (WebPolygon)geom;
Element polygonElem = XMLUtil.createElement("polygon", "", flashElem);
List points = WjQueryUtil.getPoints(polygon);
Iterator iter_points = points.iterator();
while(iter_points.hasNext()){
WebPoint point = (WebPoint)iter_points.next();
Element ptElem = XMLUtil.createElement("pt", "", polygonElem);
ptElem.setAttribute("x", String.valueOf(point.getX()));
ptElem.setAttribute("y", String.valueOf(point.getY()));
}
}else if(geom instanceof WebPolyline){
WebPolyline polyline = (WebPolyline)geom;
Element polylineElem = XMLUtil.createElement("polyline", "", flashElem);
List points = WjQueryUtil.getPoints(polyline);
Iterator iter_points = points.iterator();
while(iter_points.hasNext()){
WebPoint point = (WebPoint)iter_points.next();
Element ptElem = XMLUtil.createElement("pt", "", polylineElem);
ptElem.setAttribute("x", String.valueOf(point.getX()));
ptElem.setAttribute("y", String.valueOf(point.getY()));
};
}
}
}
}
(4)ajax-renderers.xml
明白了,
< value >
#{ajaxMapInformation2Renderer}
< / value >
说好你的位置,是那个类来处理
< managed - bean >
< managed - bean - name > ajaxMapInformation2Renderer < /managed - bean - name >
< managed - bean - class >
com.esri.arcgis.sample.mapinformation2.MapInformation2Renderer
< / managed -bean - class >
< managed - bean - scope > none < / managed - bean - scope >
< / managed - bean >
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
<faces-config>
<managed-bean>
<display-name>AJAXRenderers</display-name>
<managed-bean-name>AJAXRenderers</managed-bean-name>
<managed-bean-class>java.util.ArrayList</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<list-entries>
<value>#{ajaxMapRenderer}</value>
<value>#{ajaxOverviewRenderer}</value>
<value>#{ajaxTocRenderer}</value>
<value>#{ajaxToolbarRenderer}</value>
<value>#{ajaxTaskRenderer}</value>
<value>#{ajaxPrintTaskRenderer}</value>
<value>#{ajaxEditRenderer}</value>
<!--value>#{ajaxGpAsyncTaskResultsRenderer}</value-->
<value>#{ajaxMapViewerElementsRenderer}</value>
<value>#{ajaxMapViewerGpAsyncTaskResultsRenderer}</value>
<!-- 模糊查询 -->
<value>#{ajaxFlashQueryResultRenderer}</value>
<value>#{ajaxChartWindowResultRenderer}</value>
</list-entries>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxMapRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.MapRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxOverviewRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.OverviewRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxTocRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.TocRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxToolbarRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.ToolbarRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxTaskRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.TaskRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxPrintTaskRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.tasks.ajax.PrintTaskRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxEditRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.ags.faces.renderkit.xml.ajax.EditRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<!--managed-bean>
<managed-bean-name>ajaxGpAsyncTaskResultsRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.ags.faces.renderkit.xml.ajax.GPAsyncTaskResultsRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean-->
<!-- Web Mapping Application Specific Renderers -->
<managed-bean>
<managed-bean-name>ajaxMapViewerElementsRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.templates.MapViewerElementsRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxMapViewerGpAsyncTaskResultsRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.templates.GPAsyncTaskResultsRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<!-- 模糊查询Reanderer -->
<managed-bean>
<managed-bean-name>ajaxFlashQueryResultRenderer</managed-bean-name>
<managed-bean-class>com.oilgasgis.tools.FlashQueryResultRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<!-- 统计制图 -->
<managed-bean>
<managed-bean-name>ajaxChartWindowResultRenderer</managed-bean-name>
<managed-bean-class>com.oilgasgis.tools.WJChartWindowRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
</faces-config>
(5)JS文件
在JS中会有一个和mapInformation2TagHandler同名的回调函数。
这个就刚刚解决上面的那个问题,但真没有手头的这个系统源码,让我看帮助就看懂,得看到明年去。
Custom AJAXRenderers 它有什么优点呢?目前还不知道。
(1)JSP文件
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
Map Information :
<table>
<tbody>
<tr>
<td>MinX :</td>
<td>
<span id="minx"></span>
</td>
</tr>
<tr>
<td>MinY :</td>
<td>
<span id="miny"></span>
</td>
</tr>
<tr>
<td>MaxX :</td>
<td>
<span id="maxx"></span>
</td>
</tr>
<tr>
<td>MaxY :</td>
<td>
<span id="maxy"></span>
</td>
</tr>
<tr>
<td>Scale :</td>
<td>
<span id="map-scale"></span>
</td>
</tr>
</tbody>
这次就要在Init中增加
EsriControls.addPostBackTagHandler("map-information-2", mapInformation2TagHandler);
,就加这个就够了。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
function Init(){
//alert("dviewInit");
//关闭所有Task
closeTaskWindows();
//初始化属性提示
initHoverTips();
//初始化上下左右平移
initNavAndSlider();
//空间数据查询返回 [windowTip.js]
EsriControls.addPostBackTagHandler("returnTipValue", windowTipResultHandler11);
//空间数据管理-->选择要素
EsriControls.addPostBackTagHandler("selectAllLayerValue", selectAllLayer);
//空间结果返回 高亮显示 [flashGraphics.js]
var map = EsriControls.maps[mapId];
var cont = map.imageGrid.appendChild(document.createElement("div"));
cont.id="flashGraphics_Div";
EsriUtils.setElementStyle(cont,"position:absolute; left:0px; top:0px;z-index:999;");
initFlashGraphics("mygraphics",cont,500);
EsriControls.addPostBackTagHandler("flashfeatureset",flashElementHandler);
//地图测量
EsriControls.addPostBackTagHandler("MeasureCoordinateResult", measureCoordinate);
}
3、Java文件
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class FlashQueryResultRenderer implements AJAXRenderer{
public Class getControlClass() {
// TODO Auto-generated method stub
return MapControl.class;
}
public Object getOriginalState(UIComponent arg0) {
// TODO Auto-generated method stub
return null;
}
public void renderAjaxResponse(FacesContext facesContext, UIComponent component,
Object status, boolean isEventSource, Element parent) {
WebContext wctx = ((MapControl)component).getWebMap().getWebContext();
List rs = (List)wctx.getWebSession().getAttribute("flashQueryResult");
if(rs != null){
FlashQueryResultRenderer.appendQueryResult(parent, rs, wctx);
wctx.getWebSession().setAttribute("flashQueryResult",null);
}
}
public static void appendQueryResult(Element parent, List rs,WebContext ctx){
Iterator iter = rs.iterator();
Element flashElem = XMLUtil.createElement("flashfeatureset", "", parent);
while(iter.hasNext()){
QueryResult item = (QueryResult)iter.next();
WebGeometry geom = item.getHighlightGeometry().fromMapGeometry(ctx.getWebMap());
if(geom instanceof WebPoint){
WebPoint point = (WebPoint)geom;
Element ptElem = XMLUtil.createElement("point", "", flashElem);
ptElem.setAttribute("x", String.valueOf(point.getX()));
ptElem.setAttribute("y", String.valueOf(point.getY()));
}else if(geom instanceof WebPolygon){
WebPolygon polygon = (WebPolygon)geom;
Element polygonElem = XMLUtil.createElement("polygon", "", flashElem);
List points = WjQueryUtil.getPoints(polygon);
Iterator iter_points = points.iterator();
while(iter_points.hasNext()){
WebPoint point = (WebPoint)iter_points.next();
Element ptElem = XMLUtil.createElement("pt", "", polygonElem);
ptElem.setAttribute("x", String.valueOf(point.getX()));
ptElem.setAttribute("y", String.valueOf(point.getY()));
}
}else if(geom instanceof WebPolyline){
WebPolyline polyline = (WebPolyline)geom;
Element polylineElem = XMLUtil.createElement("polyline", "", flashElem);
List points = WjQueryUtil.getPoints(polyline);
Iterator iter_points = points.iterator();
while(iter_points.hasNext()){
WebPoint point = (WebPoint)iter_points.next();
Element ptElem = XMLUtil.createElement("pt", "", polylineElem);
ptElem.setAttribute("x", String.valueOf(point.getX()));
ptElem.setAttribute("y", String.valueOf(point.getY()));
};
}
}
}
}
(4)ajax-renderers.xml
明白了,
EsriControls.addPostBackTagHandler("map-information-2", mapInformation2TagHandler);
里指明用mapInformation2TagHandler来处理,在ajax-renderers.xml中定义好他的值,JSF的那个标签< value >
#{ajaxMapInformation2Renderer}
< / value >
说好你的位置,是那个类来处理
< managed - bean >
< managed - bean - name > ajaxMapInformation2Renderer < /managed - bean - name >
< managed - bean - class >
com.esri.arcgis.sample.mapinformation2.MapInformation2Renderer
< / managed -bean - class >
< managed - bean - scope > none < / managed - bean - scope >
< / managed - bean >
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
<faces-config>
<managed-bean>
<display-name>AJAXRenderers</display-name>
<managed-bean-name>AJAXRenderers</managed-bean-name>
<managed-bean-class>java.util.ArrayList</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<list-entries>
<value>#{ajaxMapRenderer}</value>
<value>#{ajaxOverviewRenderer}</value>
<value>#{ajaxTocRenderer}</value>
<value>#{ajaxToolbarRenderer}</value>
<value>#{ajaxTaskRenderer}</value>
<value>#{ajaxPrintTaskRenderer}</value>
<value>#{ajaxEditRenderer}</value>
<!--value>#{ajaxGpAsyncTaskResultsRenderer}</value-->
<value>#{ajaxMapViewerElementsRenderer}</value>
<value>#{ajaxMapViewerGpAsyncTaskResultsRenderer}</value>
<!-- 模糊查询 -->
<value>#{ajaxFlashQueryResultRenderer}</value>
<value>#{ajaxChartWindowResultRenderer}</value>
</list-entries>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxMapRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.MapRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxOverviewRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.OverviewRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxTocRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.TocRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxToolbarRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.ToolbarRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxTaskRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.faces.renderkit.xml.ajax.TaskRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxPrintTaskRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.tasks.ajax.PrintTaskRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxEditRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.ags.faces.renderkit.xml.ajax.EditRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<!--managed-bean>
<managed-bean-name>ajaxGpAsyncTaskResultsRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.ags.faces.renderkit.xml.ajax.GPAsyncTaskResultsRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean-->
<!-- Web Mapping Application Specific Renderers -->
<managed-bean>
<managed-bean-name>ajaxMapViewerElementsRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.templates.MapViewerElementsRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ajaxMapViewerGpAsyncTaskResultsRenderer</managed-bean-name>
<managed-bean-class>com.esri.adf.web.templates.GPAsyncTaskResultsRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<!-- 模糊查询Reanderer -->
<managed-bean>
<managed-bean-name>ajaxFlashQueryResultRenderer</managed-bean-name>
<managed-bean-class>com.oilgasgis.tools.FlashQueryResultRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
<!-- 统计制图 -->
<managed-bean>
<managed-bean-name>ajaxChartWindowResultRenderer</managed-bean-name>
<managed-bean-class>com.oilgasgis.tools.WJChartWindowRenderer</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
</faces-config>
(5)JS文件
在JS中会有一个和mapInformation2TagHandler同名的回调函数。
EsriControls.addPostBackTagHandler("map-information-2", mapInformation2TagHandler);
Code
function mapInformation2TagHandler(xml, eventSources) {
document.getElementById("minx").innerHTML = xml.getElementsByTagName("minx").item(0).firstChild.nodeValue;
document.getElementById("miny").innerHTML = xml.getElementsByTagName("miny").item(0).firstChild.nodeValue;
document.getElementById("maxx").innerHTML = xml.getElementsByTagName("maxx").item(0).firstChild.nodeValue;
document.getElementById("maxy").innerHTML = xml.getElementsByTagName("maxy").item(0).firstChild.nodeValue;
document.getElementById("map-scale").innerHTML =
xml.getElementsByTagName("map-scale").item(0).firstChild.nodeValue;
}
真是复杂,就这三种Ajax了吧,但愿!