ajaxanywhere

  1. AjaxAnywhere
  2. 读者可以从AjaxAnywhere的官方网站下载demo演示包,它是一个war工程包,可以直接部署在5.0以上版本的Tomcat服务器上。演示包中包含十二个AjaxAnywhere应用案例,包括级联的下拉列表、Web选项卡应用、JSF集成等,其部署到Tomcat后的首页效果如图11-28所示。
  3. 演示包中不涉及JSF的案例全部都是用单纯的JSP代码编写的,或者内嵌在JSP页面中的Java代码块。虽然从MVC分离的角度看这种方式不尽合理,不过可以使案例尽量简单,不依赖于任何的MVC框架。AjaxAnywhere本身对此并无要求。
  4. 而且,其中全部的JSP页面中的表单都提交到页面本身,比如,忽略form的action属性。在实际的应用程序中,可以将表单提交到任何URL中,只要保证这个URL最终将导向(forward,不是redirect)包含指定刷新区域的JSP页面。
  5. 接下来将AjaxAnywhere部署到本章的开发目录中,并且用AjaxAnywhere改造一下案例1数据校验。复制ajaxanywhere-1.1.0.6.jar到{APPLICATION_HOME}\webapps\ WEB-INF\lib文件夹,复制aa.js到AjaxCh11文件夹。修改案例1中例程6-5的sample6_2.jsp如例程11-37所示。
  6. 例程11-37 修改后的数据校验ajaxRegister.jsp
  7. <%@ page contentType="text/html; charset=gb2312"%>
  8. <%@ page import="com.ajaxlab.ajax.*"%>
  9. <%@ taglib uri="http://ajaxanywhere.sourceforge.net/" prefix="aa" %>
  10. <html>
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  13. <title>Ch11——案例:数据校验</title>
  14. <link href="../css/style.css" rel="stylesheet" type="text/css">
  15. <script language="javascript" src="aa.js"></script>
  16. <script language="javascript">
  17. ajaxAnywhere.formName = "form1";
  18. ajaxAnywhere.getZonesToReload = function() {
  19. return "feedback_info";
  20. }
  21. function doCheck() {
  22. var f = document.forms[0];
  23. if((f.username.value!="")||(f.email.value!="")) {
  24. if(f.email.value!="") {
  25. var pattern = /^[\w\.\-\_]+@{1}\w+(\.{1}\w+)+$/;
  26. var result = pattern.exec(f.email.value);
  27. if(result==null) window.alert("电子邮件格式错误,请按标准email名称格式填写,如:hello@sohu.com。");
  28. }
  29. f.action = "ajaxRegister.jsp";
  30. ajaxAnywhere.submitAJAX();
  31. }
  32. }
  33. function formSubmit() {
  34. var f = document.forms[0];
  35. f.action = "login.jsp";
  36. f.submit();
  37. }
  38. </script>
  39. </head>
  40. <body><center>
  41. <form name="form1" method="post" action="login.jsp">
  42. <table width="500" border="0" cellspacing="0" cellpadding="4">
  43. <caption>用户注册</caption>
  44. <tr>
  45. <td width="70">用户名称:</td>
  46. <td width="414"><input name="username" type="text" class="f orm_ text" id="username" size="40">
  47. <input name="userCheck" type="button" class="button" id= " userCheck" value="惟一性检查" onClick="doCheck()">
  48. </td>
  49. </tr>
  50. <tr>
  51. <td>密码:</td>
  52. <td><input name="password" type="password" class="form_tex t" id="password" size="40"></td>
  53. </tr>
  54. <tr>
  55. <td>电子邮件:</td>
  56. <td><input name="email" type="text" class="form_text" id= "email" size="40">
  57. <input name="emailCheck" type="button" class="button" id= "emailCheck" value="惟一性检查" onClick="doCheck()">
  58. </td>
  59. </tr>
  60. <tr>
  61. <td colspan="2">
  62. <font color="#FF0000">
  63. <aa:zone name="feedback_info">
  64. <%
  65. String username = request.getParameter("username");
  66. String email = request.getParameter("email");
  67. UserService service = new UserService();
  68. if((username!=null)&&(!"".equals(username))) {
  69. UserValue user = service.findUserByName(username);
  70. if(user!=null) out.println("用户名称["+username+"]已经被注册,请更换其他用户名称再注册。<br>");
  71. else out.println("用户名称["+username+"]尚未被注册,您可以继续。<br>");
  72. }
  73. if((email!=null)&&(!"".equals(email))) {
  74. UserValue user = service.findUserByEmail(email);
  75. if(user!=null) out.println("电子邮件["+email+"]已经被注册,请更换其他用户名称再注册。");
  76. else out.println("电子邮件["+email+"]尚未被注册,您可以继续。");
  77. }
  78. %>
  79. </aa:zone>
  80. </font>
  81. </td>
  82. </tr>
  83. <tr align="center">
  84. <td colspan="2"><input name="Submit" type="submit" class= "button" value="提交" onClick="formSubmit();return false;"></td>
  85. </tr>
  86. </table>
  87. </form>
  88. </center>
  89. </body>
  90. </html>
  91. 例程11-37引用了AjaxAnywhere的Javascript库文件aa.js,并设置AjaxAnywhere对象的formName为form1,重载其getZonesToReload方法指定更新区域为feedback_info。事件处理函数doCheck()调用AjaxAnywhere对象的submitAJAX()方法,向服务器提交Ajax请求,并进行数据校验。页面上则使用了<aa:zone name="feedback_info"></aa:zone>标签指定原来<label>标记所定义的区域为页面可刷新区域,该标签最终被解析成<span id="feedback_ info"></span>。原来在register.jsp中的数据校验逻辑也整合到ajaxRegister.jsp中了。当单击“惟一性检查”按钮的时候,AjaxAnywhere向服务器提起数据校验请求,随后将校验结果显示在可刷新区域feedback_info

AjaxAnywhere的类库及其用法 AjaxAnywhere使用一个名为aa.js的Javascript文件来处理客户端的全部Ajax操作,包括初始化XMLHttpRequest、获取表单内容、发送Ajax请求、执行回调函数等。aa.js也是使用AjaxAnywhere之前必须了解的,至少应该知道其经常用到的API。Ajax Anywhere的官方网站提供了相应的Javascript Document,方便快速查找和了解这些API。 1.AjaxAnywhere的初始化 aa.js中定义了一个AjaxAnywhere对象,针对Ajax的各种操作被抽象成AjaxAnywhere对象的方法,通过这些对象方法完成所需的操作。必要的时候,可以重载这些方法,以便满足个性化的需求。在aa.js文件的末端,AjaxAnywhere对象使用默认的构造方法完成对象实例化。 ajaxAnywhere = new AjaxAnywhere(); ajaxAnywhere.bindById(); 所以,所有引用aa.js的页面都可以在Javascript代码段中使用AjaxAnywhere对象的实例ajaxAnywhere。 当AjaxAnywhere初始化的时候,它在默认的构造函数中完成XMLHttpRequest对象的创建,并保存在AjaxAnywhere对象属性req中。AjaxAnywhere对象默认的构造方法如例程11-23所示。 例程11-23 AjaxAnywhere对象的默认构造方法 function AjaxAnywhere() { this.id = AjaxAnywhere.defaultInstanceName;//id,用于生成更新区域的编号等用途 this.formName = null;//页面表单名称 this.notSupported = false;//是否支持Ajax this.delayBeforeContentUpdate = true;//在更新页面内容之前是否延迟 this.delayInMillis = 100;//延迟时间 //初始化XMLHttpRequest对象--req if (window.XMLHttpRequest) { this.req = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { this.req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { this.req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e1) { this.notSupported = true; /* XMLHTTPRequest not supported */ } } } //确定浏览器是否支持Ajax if (this.req == null || typeof this.req == "undefined") this.notSupported = true; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值