b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

ejb3 programmer guide_programmer》_programmer 壁纸(4)

电脑杂谈  发布时间:2019-09-05 17:16:07  来源:网络整理
function createRequest(method, url, callback) {
    var request;
    if (window.XMLHttpRequest)
        request = new XMLHttpRequest();
    else if (window.ActiveXObject)
        request = new ActiveXObject("Microsoft.XMLHTTP");
    else
        return null;
    request.open(method, url, true);
    function calbackWrapper() {
        callback(request);
    }
    request.onreadystatechange = calbackWrapper;
    return request;
}

当XMLHttpRequest 对象状况改变时,它不会向所读取的变量传递任何参数,但回调需要该请求对象以获取 Ajax 响应。因此,createRequest() 使用一个充当实际回调的包装的外部变量,从而获取到请求对象的引用。

每个XMLHttpRequest 对象必须用于一个 Ajax 请求,这样应用程序就可以在所有支持 Ajax 的浏览器中正常工作了。换言之,不面对多个请求重用同一个XMLHttpRequest 对象。然而,这些对象在用于防止浏览器中的内存泄漏之后应销毁。依据我的经验,销毁XMLHttpRequest 对象的最安全的方式是:先将其onreadystatechange 属性修改成一个不执行任何操作的 JavaScript 函数,调用abort() 方法,然后用delete 释放内存:

function deleteRequest(request) {
    function doNothing() {
    }
    request.onreadystatechange = doNothing;
    request.abort();
    delete request;
}

adUpdate() 函数是传递给createRequest() 的回调。如果该请求完成(就绪状态为 4)并且顺利(状态为 200),adUpdate() 就会从请求对象的responseText 属性获取 Ajax 响应的内容。然后,adUpdate() 将responseText 存储到 id 为ad 的元素的innerHTML 属性中。这与将 Ajax 响应插入AdForm.jsp 页面的<div id="ad"></div> 元素中是等效的:

var debug = true;
function adUpdate(request) {
    if (request.readyState == 4) {
        if (request.status == 200) {
            var adSection = document.getElementById("ad");
            adSection.innerHTML = request.responseText;
        } else if (debug) {
            if (request.statusText)
                alert(request.statusText);
            else
                alert("HTTP Status: " + request.status);
        }
    }
}

在本文的样例应用程序中,用户的输入需要释放给 Ajax-EJB 控制器 servlet。getUserInput() 函数获取所有文本域的值并将这种值连接上去,返回一个字符串:

function getUserInput() {
    var userInput = "";
    var forms = document.forms;
    for (var i = 0; i < forms.length; i++) {
        var elems = forms[i].elements;
        for (j = 0; j < elems.length; j++) {
            var elemType = elems[j].type.toLowerCase();
            if (elemType == "text" || elemType == "textarea") {
                var elemValue = elems[j].value;
                userInput += " " + elemValue;
            }
        }
    }
    return userInput;
}

sendAdRequest() 函数将销毁曾经的XMLHttpRequest 对象(如果有的话),将userInput 参数添加到 URL,创建一个新的请求对象,并调用其send() 方法向控制器 servlet 提交 Ajax 请求。URL 以.. 开头,这是因为该 servlet 是从其 URL 包含/faces 前缀的 JSF 页面调用的:

var adURL = "../adservlet"
var adRequest = null;
function sendAdRequest() {
    if (adRequest)
        deleteRequest(adRequest);
    var url = adURL + "?userInput=" + escape(getUserInput());
    adRequest = createRequest("GET", url, adUpdate);
    adRequest.send(null);
}

init() 函数将调用sendAdRequest() 初始化该页面的 ad 部分。然后,setInterval() 用于指示浏览器每秒读取一次sendAdRequest():

function init() {
    sendAdRequest();
    setInterval("sendAdRequest()", 1000);
}

右键点击Web Content 文件夹的AdForm.jsp 页面,单击Run。JDeveloper 将开启嵌入式 OJ 服务器,并将在浏览器窗口中开启 JSF 页面。如果您开始在字段的一个文本域中输入信息,就会注意到 ad 每秒钟是怎样变化的。

在本文中,您知道了怎样构建 Java 企业版 Ajax 应用程序,方法是:使用 JDeveloper 的可视化编辑器以及用于构建 EJB3 组件、Ajax-EJB 控制器 servlet 和基于 ADF Faces 的 JSF 页面的向导。您还学习了几种 Ajax 技巧,从而可以正确地管理 XMLHttpRequest 对象。

Andrei Cioroianu (devtools@devsphere.com) 是Devsphere () 的创始人,该公司主要提供 Java 企业版开发和 Ajax/JSF 咨询服务。Cioroianu 撰写了许多 Java 文章,分别发表在 Oracle 技术网、ONJava ()、JavaWorld () 和Java Developer’s Journal。他还与他人合著了Java XML Programmer's Reference 和Professional Java XML 两书(均由 Wrox Press 出版)。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-121815-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...