扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
}
}
}
replaceExistingWithNewHtml() 是为processStateChange()使用的“私有”方法。
function replaceExistingWithNewHtml
(newTextElements){
//循环newTextElements
for(var i=newTextElements.length-1;i>=0;--i){
//判断是否以 if(newTextElements[i].
indexOf("-1){
//获得span的名字- 设置在第一和第二个引号之间
//确认span元素是以下的格式
//NewContent
startNamePos=newTextElements[i].
indexOf('"')+1;
endNamePos=newTextElements[i].
indexOf('"',startNamePos);
name=newTextElements[i].
substring(startNamePos,endNamePos);
//获得内容-在第一个>标记后的所有内容
startContentPos=newTextElements[i].
indexOf('>')+1;
content=newTextElements[i].
substring(startContentPos);
//现在更新现有的Document中的元素,
// 确保文档存在该元素
if(document.getElementById(name)){
document.getElementById(name).
innerHTML = content;
}
}
}
splitTextIntoSpan() 是为processStateChange() 使用的“私有”方法。
function splitTextIntoSpan(textToSplit){
//分割文档
returnElements=textToSplit.
split("")
//处理每个元素
for(var i=returnElements.length-1;i>=0;--i){
//删除掉第一个span后面的元素
spanPos = returnElements[i].
indexOf("
//如果找到匹配的,获得span前的内容
if(spanPos>0){
subString=returnElements[i].
substring(spanPos);
returnElements[i]=subString;
}
}
return returnElements;
}
新的控制流
添加以下的JavaScript代码到我们的应用中,以下的步骤将在服务器和浏览器中执行。
1. 如同一个普通Struts应用装载页面。
2. 用户改变文本框的值,触发一个onChange() 事件,调用retrieveURL() 方法。
3. 该JavaScript方法通过发送Struts明白的表单变量(后台)请求到服务器的Struts Action。
4. 该JavaScript方法同样设定了第二个JavaScript方法的名字,此方法将到服务器响应完毕后调用。本例子中,设定为processStateChange() 方法。
5. 如我们所预期的,服务器响应完毕,调用processStateChange() 方法。
6. JavaScript在(新的)服务器响应中循环取出所有元素。将页面上存在与获得元素名字相同的 中的元素替换掉。
在你的应用中设计AJAX
以上描述的JavaScript方法能在大多数的应用中使用,包括比我们的例子复杂得多的。但是,在使用之前,你需要注意以下几点:
· 避免复制代码,最好在初始化请求(如,显示完整的页面)和AJAX(更新部分页面)请求中使用相同的Struts Action和JSP。
·在公共的Action(控制器)中,决定JSP页面(所有的JSP页面或者其中的一部分)中的一个区域需要传送到浏览器。通过在web服务器的session或者ActionForm中设定标记来让JSP页面知道哪些部分需要提交。
· 在JSP中,使用Struts 或者JSTL标签来决定提交的HTML区域。
使用AJAX的本例子,可以在以下下载: struts-Ajax.zip
结语
AJAX技术允许我们在创建和使用web应用的时候完全的改变。本文介绍了一个简单的技术,在现有的Struts应用中增加Struts的处理。它允许我们利用我们已有的东西,不仅仅是代码,还包括了开发的技能。作为一个好的产品,它同样允许我们写出更清晰,更具移植性的Java Struts应用。
资源
·作者的blog:http://blog.matrix.org.cn/page/pawenwen
· Sample code for this article
· Definition of AJAX
· "Using AJAX to Catch JavaScript Errors" (XML.com文章)
· "Developing AJAX Applications the Easy Way" (java.net文章)
· "An Introduction to AJAX" (dev2dev文章)
·"AJAX on Rails" (ONLamp.com文章)
· DWR: Direct Web Remoting Project
· Struts Framework Project
·JSF: Java Server Faces Project
Paul Browne 作为企业级Java顾问为FirstPartners.net 工作已有7年了。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者