局部刷新的两种实现方式

最近忙于上海东方有线的项目,客户需要一些下拉框的局部刷新功能,我参看了其他同事的代码,发现并未实现数据的异步传输,而是采用from局部提交的方式。以下是整理出来的经典下拉列表局部刷新功能Example的部分关键代码,采用了两种方式:localRefresh_1.jsp的功能全部自己手动编写;localRefresh_2.jsp采用prototype.js的方法。

 

createXHR.js:(创建XMLHttpRequest)

  1. function createXMLHttpRequest() {
  2.     var xmlHttp;
  3.     if(window.ActiveXObject) {
  4.         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  5.     }
  6.     else if(window.XMLHttpRequest) {
  7.         xmlHttp = new XMLHttpRequest();
  8.     }
  9.     
  10.     return xmlHttp;
  11. }

startRequest.js:(向服务器发送数据)

  1. function startRequest_get(xmlHttp, url) {
  2.     xmlHttp.onreadystatechange = handleStateChange;
  3.     xmlHttp.open("GET", url, true);
  4.     xmlHttp.send(null);
  5. }
  6. function startRequest_post(xmlHttp, url, parameter) {
  7.     xmlHttp.open("POST", url, true);
  8.     xmlHttp.onreadystatechange = handleStateChange;
  9.     xmlHttp.setRequestHeader("Content-Type""application/x-www-form-urlencoded;");
  10.     xmlHttp.send(parameter);
  11. }

localRefresh_1.jsp:(自己编写JS)

  1. <%@ page contentType="text/html" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. %>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  6. <html>
  7.   <head>
  8.     
  9.     <title>My JSP 'test.jsp' starting page</title>
  10.     <!--
  11.     <link rel="stylesheet" type="text/css" href="styles.css">
  12.     -->
  13.     <script type="text/javascript"  src="<%=path%>/js/createXHR.js"></script>
  14.     <script type="text/javascript"  src="<%=path%>/js/startRequest.js"></script>
  15.     <script type="text/javascript">
  16.     <!--
  17.       var xmlHttp = createXMLHttpRequest();
  18.       function startRequest() {
  19.         var parameterStr = "languageType=" + document.getElementById("langeuage").value;
  20.         startRequest_post(xmlHttp, "<%=path%>/getAndPostExample.do", parameterStr);
  21.       }
  22.       
  23.       function handleStateChange(){
  24.         if(xmlHttp.readyState == 4) {
  25.           if(xmlHttp.status == 200 || xmlHttp.status == 0) {
  26.             getSecondList();
  27.           } 
  28.         }
  29.       }
  30.       
  31.       function getSecondList() {
  32.         document.getElementById("second").innerHTML = xmlHttp.responseText;
  33.       }
  34.      //-->
  35.     </script>
  36.   </head>
  37.   
  38.   <body> 
  39.     <br>This is my JSP page. <br>
  40.     <input type="button" value="button">
  41.     <br>
  42.     <select id="langeuage" onchange="startRequest()">
  43.       <option value="0">please</option>
  44.       <option value="1">Java</option>
  45.       <option value="2">C/C++</option>
  46.       <option value="3">Perl</option>
  47.       <option value="4">.net</option>
  48.     </select>
  49.     <div id="second" style="display:inLine">
  50.       <select id="languageDesc">
  51.         <option value="0">please</option>
  52.         <option value="1_1">J2SE</option>
  53.         <option value="1_2">J2EE</option>
  54.         <option value="1_3">J2ME</option>
  55.         <option value="2_1">C90</option>
  56.         <option value="2_2">C99</option>
  57.         <option value="2_3">C++</option>
  58.         <option value="3_1">perl</option>
  59.         <option value="4_1">VB</option>
  60.         <option value="4_2">VC</option>
  61.         <option value="4_3">C#</option>
  62.       </select>
  63.     </div>
  64.     
  65.   </body>
  66. </html>

localRefresh_2.jsp:(利用prototype.js实现局部刷新)

  1. <%@ page contentType="text/html" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. %>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  6. <html>
  7.   <head>
  8.     
  9.     <title>My JSP 'test.jsp' starting page</title>
  10.     <!--
  11.     <link rel="stylesheet" type="text/css" href="styles.css">
  12.     -->
  13.     <script type="text/javascript"  src="<%=path%>/js/prototype-1.4.0.js"></script>
  14.     <script type="text/javascript">
  15.     <!--
  16.       function startRequest(){
  17.         var url = '<%=path%>/getAndPostExample.do';
  18.         var pars = "languageType=" + $F("langeuage");
  19.         var myAjax = new Ajax.Updater(
  20.             'second',
  21.             url,
  22.             {
  23.                 method: 'post',
  24.                 parameters: pars
  25.             });
  26.        }
  27.      //-->
  28.     </script>
  29.   </head>
  30.   
  31.   <body>
  32.     This is my JSP page. <br>
  33.     <input type="button" value="button">
  34.     <br>
  35.     <select id="langeuage" οnchange="startRequest()">
  36.       <option value="0">please</option>
  37.       <option value="1">Java</option>
  38.       <option value="2">C/C++</option>
  39.       <option value="3">Perl</option>
  40.       <option value="4">.net</option>
  41.     </select>
  42.     <div id="second" style="display:inLine">
  43.       <select id="languageDesc">
  44.         <option value="0">please</option>
  45.         <option value="1_1">J2SE</option>
  46.         <option value="1_2">J2EE</option>
  47.         <option value="1_3">J2ME</option>
  48.         <option value="2_1">C90</option>
  49.         <option value="2_2">C99</option>
  50.         <option value="2_3">C++</option>
  51.         <option value="3_1">perl</option>
  52.         <option value="4_1">VB</option>
  53.         <option value="4_2">VC</option>
  54.         <option value="4_3">C#</option>
  55.       </select>
  56.     </div>
  57.     
  58.   </body>
  59. </html>

 

GetAndPostExample.java:(重写doPost和doGet,将结果写入jsp)

  1. package common;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. public class GetAndPostExample extends HttpServlet{
  8.     /**
  9.      * 
  10.      * @param request
  11.      * @param response
  12.      * @param method
  13.      * @throws IOException
  14.      */
  15.     public void poressRequest(HttpServletRequest request, HttpServletResponse response,
  16.             String method) throws IOException {
  17.         
  18.         response.setContentType("text/html");
  19.         String languageType = request.getParameter("languageType");
  20.         
  21.         PrintWriter out = response.getWriter();
  22.         out.print(new CreateLanguageDesc().getLanguateDesc(languageType));
  23.         out.close();
  24.     }
  25.     
  26.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
  27.         poressRequest(request, response, "GET");
  28.     }
  29.     
  30.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  31.         poressRequest(request, response, "Post");
  32.     }
  33. }

     CreateLanguageDesc.java(业务逻辑,组织数据)

  1. package common;
  2. /**
  3.  * This class user for chose language and translate the result into HTML
  4.  * @author ibm
  5.  *
  6.  */
  7. class CreateLanguageDesc {
  8.     /**
  9.      * 
  10.      * @param languateType
  11.      * @return
  12.      */
  13.     String getLanguateDesc(String languateType) {
  14.         
  15.         StringBuffer select = new StringBuffer();
  16.         StringBuffer options = new StringBuffer();
  17.         
  18.         select.append("<select id='languageDesc'>");
  19.         if(languateType == null || languateType.equals("")) {
  20.             createPlease();
  21.         }
  22.         else if(languateType.equals(LanguateType.JAVA)) {
  23.             options.append(createJava());
  24.         }
  25.         else if(languateType.equals(LanguateType.C)) {
  26.             options.append(createC());
  27.         }
  28.         else if(languateType.equals(LanguateType.Perl)) {
  29.             options.append(createPerl());
  30.         }
  31.         else if(languateType.equals(LanguateType.NET)) {
  32.             options.append(createNet());
  33.         }
  34.         else {
  35.             options.append(createAll());
  36.         }
  37.         select.append(options);
  38.         select.append("</select>");
  39.         
  40.         return select.toString();
  41.     }
  42.     /**
  43.      * create please options
  44.      * @return
  45.      */
  46.     private StringBuffer createPlease() {
  47.         StringBuffer options = new StringBuffer();
  48.         options.append("<option value='0'>Please</option>");
  49.         
  50.         return options;
  51.     }
  52.     
  53.     /**
  54.      * create javaDesc options
  55.      * @return
  56.      */
  57.     private StringBuffer createJava() {
  58.         StringBuffer options = new StringBuffer();
  59.         options.append("<option value='1_1'>J2SE</option>");
  60.         options.append("<option value='1_2'>J2EE</option>");
  61.         options.append("<option value='1_3'>J2ME</option>");
  62.         
  63.         return options;
  64.     }
  65.     /**
  66.      * create C/C++Desc options
  67.      * @return
  68.      */
  69.     private StringBuffer createC() {
  70.         StringBuffer options = new StringBuffer();
  71.         options.append("<option value='2_1'>C90</option>");
  72.         options.append("<option value='2_2'>C99</option>");
  73.         options.append("<option value='2_3'>C++</option>");
  74.         
  75.         return options;
  76.     }
  77.     
  78.     /**
  79.      * create PerlDesc options
  80.      * @return
  81.      */
  82.     private StringBuffer createPerl() {
  83.         StringBuffer options = new StringBuffer();
  84.         options.append("<option value='3_1'>Perl</option>");
  85.         
  86.         return options;
  87.     }
  88.     
  89.     /**
  90.      * create .netDesc options
  91.      * @return
  92.      */
  93.     private StringBuffer createNet() {
  94.         StringBuffer options = new StringBuffer();
  95.         options.append("<option value='4_1'>VB</option>");
  96.         options.append("<option value='4_2'>VC</option>");
  97.         options.append("<option value='4_3'>C#</option>");
  98.         
  99.         return options;
  100.     }
  101.     
  102.     /**
  103.      * create all of languageDesc options
  104.      * @return
  105.      */
  106.     private StringBuffer createAll() {
  107.         StringBuffer options = new StringBuffer();
  108.         options.append(createPlease());
  109.         options.append(createJava());
  110.         options.append(createC());
  111.         options.append(createPerl());
  112.         options.append(createNet());
  113.         
  114.         return options;
  115.     }
  116. }

相比之下,localRefresh_2.jsp的代码要简单的多,多利用开源工具不仅提高了效率,还提高了可读性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值