您的位置:首页 > 编程语言 > Java开发

JAVA ADF运行原理(6)-----AJAXRenderer

2010-06-04 23:33 148 查看
前面总结过一次关于AJAX请求,在总结中我们通过PhaseListener来捕捉请求参数,然后进行请求的分发和返回XML参数,最后在客户端进行解析。这一节我们通过提交task按钮请求,通过AJAX响应机制,获取task中的参数。

在CoustomTask的select(MapEvent event)函数中添加了下面一段代码:

int queryResultNumber = 0;

if(listQueryResult != null){

queryResultNumber = listQueryResult.size();

}

webContext.getWebSession().setAttribute("queryResultNumber", queryResultNumber);

我们定义了queryResultNumber,传入数据集的长度,作为参数加入到Session中。

下面建立一个CustomRenderer类,这个类实现AJAXRenderer接口。

public class CustomRenderer implements AJAXRenderer {

public Class getControlClass() {

return MapControl.class;

}

public Object getOriginalState(UIComponent component) {

return null;

}

public void renderAjaxResponse(FacesContext fctx, UIComponent component, Object state, boolean isEventSource, Element parent) {

WebContext wctx = WebUtil.getWebContext(component);

Object obj = wctx.getWebSession().getAttribute("queryResultNumber");

if(obj != null){

Element myElement = XMLUtil.createElement("queryResultNumber","",parent);

Element number = XMLUtil.createElement("number", "", myElement);

number.setAttribute("count", obj.toString());

wctx.getWebSession().setAttribute("queryResultNumber",null);

}

}

}

CustomRenderer方法public void renderAjaxResponse可以看到对请求参数的处理过程,从Session中获得了queryResultNumber,XMLUtil创建xml文档,返回处理结果,然后提交XmlResponse。

类似与GISFunctionality一样,我们要将CustomRenderer类注册到Ajax-renderers配置文件中。打开WEB-INF/ajax-renderers.xml可以看到:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<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>#{customRenderer}</value>

<!--value>#{ajaxGpAsyncTaskResultsRenderer}</value-->

<value>#{ajaxMapViewerElementsRenderer}</value>

<value>#{ajaxMapViewerGpAsyncTaskResultsRenderer}</value>

</list-entries>

</managed-bean>

<managed-bean>

<managed-bean-name>customRenderer</managed-bean-name>

<managed-bean-class>com.esri.adf.web.developer.CustomRenderer</managed-bean-class>

<managed-bean-scope>none</managed-bean-scope>

</managed-bean>

</faces-config>

在此定义了customRenderer bean,并注册到AJAXRenderers中。

下面是前台的处理代码:

function init(){

initLayout();

closeTaskWindows();

EsriControls.addPostBackTagHandler("queryResultNumber",queryResultNumberHandler);

}

function queryResultNumberHandler(xml){

var numberTag = xml.getElementsByTagName("number").item(0);

alert("矩形框查询后结果一共有<" + numberTag.getAttribute("count") + ">个");

}

<body onload=”init()”>,在此处调用。

最后来梳理一下,从Task消息请求发起,整个响应的运行过程。首先程序会进入到select函数,执行在Session中设定queryResultNumber参数值,随后程序会进入 CustomRenderer,构建xmlResponse,之后前台的init()函数被调用,解析xml,获取参数,输出结果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: