AJAX实例入门

None.gif           AJAX实例入门 
None.gif 
None.gif  一、开门见山
None.gif
None.gif  这些时间,瞎子也看得见,AJAX正大踏步的朝我们走来。不管我们是拥护也好,反对也罢,还是视而不见,AJAX像一阵潮流,席转了我们所有的人。
None.gif
None.gif 
None.gif  关于AJAX的定义也好,大话也好,早有人在网上发表了汗牛充栋的文字,在这里我也不想照本宣科。
None.gif
None.gif  只想说说我感觉到的一些优点,对于不对,大家也可以和我讨论:
None.gif
None.gif  首先是异步交互,用户感觉不到页面的提交,当然也不等待页面返回。这是使用了AJAX技术的页面给用户的第一感觉。
None.gif
None.gif  其次是响应速度快,这也是用户强烈体验。
None.gif
None.gif  然后是与我们开发者相关的,复杂UI的成功处理,一直以来,我们对B
/S模式的UI不如C/S模式UI丰富而苦恼。现在由于AJAX大量使用JS,使得复杂的UI的设计变得更加成功。
None.gif
None.gif  最后,AJAX请求的返回对象为XML文件,这也是一个潮流,就是WEB SERVICE潮流一样。易于和WEB SERVICE结合起来。
None.gif
None.gif  好了,闲话少说,让我们转入正题吧。
None.gif
None.gif  我们的第一个例子是基于Servlet为后台的一个web应用。
None.gif
None.gif  二、基于Servlet的AJAX
None.gif 
None.gif  这是一个很常见的UI,当用户在第一个选择框里选择ZHEJIANG时,第二个选择框要出现ZHEJIANG的城市;当用户在第一个选择框里选择JIANGSU时,第二个选择框里要出现JIANGSU的城市。
None.gif
None.gif  首先,我们来看配置文件web.xml,在里面配置一个servlet,跟往常一样:
None.gif
None.gif 
<web-app version="2.4" 
None.gif xmlns
="http://java.sun.com/xml/ns/j2ee" 
None.gif xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
None.gif xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
None.gif
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
None.gif
 
None.gif 
<servlet> 
None.gif 
<servlet-name>SelectCityServlet</servlet-name> 
None.gif 
<servlet-class>com.stephen.servlet.SelectCityServlet</servlet-class> 
None.gif 
</servlet> 
None.gif 
None.gif 
<servlet-mapping> 
None.gif 
<servlet-name>SelectCityServlet</servlet-name> 
None.gif 
<url-pattern>/servlet/SelectCityServlet</url-pattern> 
None.gif 
</servlet-mapping> 
None.gif 
None.gif 
</web-app>
None.gif
None.gif  然后,来看我们的JSP文件:
None.gif
None.gif 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
None.gif 
<html>
None.gif 
<head>
None.gif 
<title>MyHtml.html</title>
None.gif 
None.gif 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
None.gif 
<meta http-equiv="description" content="this is my page">
None.gif 
None.gif 
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
None.gif 
None.gif 
</head>
None.gif 
<script type="text/javascript">
ExpandedBlockStart.gifContractedBlock.gif function getResult(stateVal) 
dot.gif{
InBlock.gif       var url 
= "servlet/SelectCityServlet?state="+stateVal; 
ExpandedSubBlockStart.gifContractedSubBlock.gif       
if (window.XMLHttpRequest) dot.gif
InBlock.gif               req 
= new XMLHttpRequest(); 
ExpandedSubBlockStart.gifContractedSubBlock.gif       }
else if (window.ActiveXObject) dot.gif
InBlock.gif               req 
= new ActiveXObject("Microsoft.XMLHTTP"); 
ExpandedSubBlockEnd.gif       }
 
ExpandedSubBlockStart.gifContractedSubBlock.gif       
if(req)dot.gif
InBlock.gif               req.open(
"GET",url, true); 
InBlock.gif               req.onreadystatechange 
= complete; 
InBlock.gif               req.send(
null); 
ExpandedSubBlockEnd.gif       }
 
ExpandedBlockEnd.gif }
 
ExpandedBlockStart.gifContractedBlock.gif function complete()
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif       
if (req.readyState == 4dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif               
if (req.status == 200dot.gif
InBlock.gif                       var city 
= req.responseXML.getElementsByTagName("city"); 
InBlock.gif                       file:
//alert(city.length);
InBlock.gif
                       var str=new Array();
ExpandedSubBlockStart.gifContractedSubBlock.gif                       
for(var i=0;i<city.length;i++)dot.gif{
InBlock.gif                               str[i]
=city[i].firstChild.data;
ExpandedSubBlockEnd.gif                       }

InBlock.gif                       file:
//alert(document.getElementById("city"));
InBlock.gif
                       buildSelect(str,document.getElementById("city"));
ExpandedSubBlockEnd.gif               }

ExpandedSubBlockEnd.gif       }

ExpandedBlockEnd.gif }

ExpandedBlockStart.gifContractedBlock.gif function buildSelect(str,sel) 
dot.gif{
InBlock.gif       sel.options.length
=0;
ExpandedSubBlockStart.gifContractedSubBlock.gif       
for(var i=0;i<str.length;i++dot.gif{
InBlock.gif               sel.options[sel.options.length]
=new Option(str[i],str[i])
ExpandedSubBlockEnd.gif       }

ExpandedBlockEnd.gif }

None.gif 
</script>
None.gif 
<body>
None.gif 
<select name="state" onChange="getResult(this.value)">
None.gif       
<option value="">Select</option>>
None.gif       
<option value="zj">ZEHJIANG</option>>
None.gif       
<option value="zs">JIANGSU</option>>
None.gif 
</select>
None.gif 
<select id="city">
None.gif   
<option value="">CITY</option>
None.gif 
</select>
None.gif 
</body>
None.gif 
</html>
None.gif
None.gif  第一眼看来,跟我们平常的JSP没有两样。仔细一看,不同在JS里头。
None.gif
None.gif  我们首先来看第一个方法:getResult(stateVal),在这个方法里,首先是取得XmlHttpRequest;然后设置该请求的url:req.open(
"GET",url, true);接着设置请求返回值的接收方法:req.onreadystatechange = complete;该返回值的接收方法为——complete();最后是发送请求:req.send(null);
None.gif
None.gif  然后我们来看我们的返回值接收方法:complete(),这这个方法里,首先判断是否正确返回,如果正确返回,用DOM对返回的XML文件进行解析。关于DOM的使用,这里不再讲述,请大家参阅相关文档。得到city的值以后,再通过buildSelect(str,sel)方法赋值到相应的选择框里头去。
None.gif 
None.gif  最后我们来看看Servlet文件:
None.gif
None.gif 
import java.io.IOException;
None.gif 
import java.io.PrintWriter;
None.gif 
None.gif 
import javax.servlet.ServletException;
None.gif 
import javax.servlet.http.HttpServlet;
None.gif 
import javax.servlet.http.HttpServletRequest;
None.gif 
import javax.servlet.http.HttpServletResponse;
None.gif 
ExpandedBlockStart.gifContractedBlock.gif 
/** *//**
InBlock.gif  * 
@author Administrator
InBlock.gif  *
InBlock.gif  * TODO To change the template for this generated type comment go to
InBlock.gif  * Window - Preferences - Java - Code Style - Code Templates
ExpandedBlockEnd.gif  
*/

ExpandedBlockStart.gifContractedBlock.gif 
public class SelectCityServlet extends HttpServlet dot.gif{
InBlock.gif 
InBlock.gif 
ExpandedSubBlockStart.gifContractedSubBlock.gif   
public SelectCityServlet() dot.gif{
InBlock.gif           
super();
ExpandedSubBlockEnd.gif   }

InBlock.gif 
ExpandedSubBlockStart.gifContractedSubBlock.gif   
public void destroy() dot.gif{
InBlock.gif           
super.destroy(); 
ExpandedSubBlockEnd.gif   }

InBlock.gif 
InBlock.gif   
public void doGet(HttpServletRequest request, HttpServletResponse response)
ExpandedSubBlockStart.gifContractedSubBlock.gif                   
throws ServletException, IOException dot.gif{
InBlock.gif           response.setContentType(
"text/xml");
InBlock.gif           response.setHeader(
"Cache-Control""no-cache");
InBlock.gif           String state 
= request.getParameter("state");
InBlock.gif           StringBuffer sb
=new StringBuffer("<state>");
ExpandedSubBlockStart.gifContractedSubBlock.gif           
if ("zj".equals(state))dot.gif{
InBlock.gif                   sb.append(
"<city>hangzhou</city><city>huzhou</city>");
ExpandedSubBlockStart.gifContractedSubBlock.gif           }
 else if("zs".equals(state))dot.gif{
InBlock.gif                   sb.append(
"<city>nanjing</city><city>yangzhou</city><city>suzhou</city>");
ExpandedSubBlockEnd.gif           }

InBlock.gif           sb.append(
"</state>");
InBlock.gif           PrintWriter out
=response.getWriter();
InBlock.gif           out.write(sb.toString());
InBlock.gif           out.close();
ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif }

None.gif
None.gif  这个类也十分简单,首先是从request里取得state参数,然后根据state参数生成相应的XML文件,最后将XML文件输出到PrintWriter对象里。
None.gif
None.gif  到现在为止,第一个例子的代码已经全部结束。是不是比较简单?我们进入到第二个实例吧!这次是基于JSP的AJAX的一个应用。
None.gif
None.gif  三、基于JSP的AJAX
None.gif
None.gif   这个例子是关于输入校验的问题,我们知道,在申请用户的时候,需要去数据库对该用户性进行唯一性确认,然后才能继续往下申请。
None.gif 
None.gif  这种校验需要访问后台数据库,但又不希望用户在这里提交后等待,当然是AJAX技术大显身手的时候了。
None.gif
None.gif  首先来看显示UI的JSP:
None.gif
None.gif 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
None.gif 
<html>
None.gif 
<head>
None.gif 
<title>Check.html</title>
None.gif 
None.gif 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
None.gif 
<meta http-equiv="description" content="this is my page">
None.gif 
None.gif 
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
None.gif 
None.gif 
</head>
None.gif 
<script type="text/javascript">
None.gif  var http_request 
= false;
ExpandedBlockStart.gifContractedBlock.gif  function send_request(url) 
dot.gif{//初始化、指定处理函数、发送请求的函数
InBlock.gif
   http_request = false;
InBlock.gif   file:
//开始初始化XMLHttpRequest对象
ExpandedSubBlockStart.gifContractedSubBlock.gif
   if(window.XMLHttpRequest) dot.gif{ file://Mozilla 浏览器
InBlock.gif
  http_request = new XMLHttpRequest();
ExpandedSubBlockStart.gifContractedSubBlock.gif  
if (http_request.overrideMimeType) dot.gif{//设置MiME类别
InBlock.gif
   http_request.overrideMimeType('text/xml');
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif   }

ExpandedSubBlockStart.gifContractedSubBlock.gif   
else if (window.ActiveXObject) dot.gif// IE浏览器
ExpandedSubBlockStart.gifContractedSubBlock.gif
  try dot.gif{
InBlock.gif   http_request 
= new ActiveXObject("Msxml2.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif  }
 catch (e) dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif   
try dot.gif{
InBlock.gif    http_request 
= new ActiveXObject("Microsoft.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif   }
 catch (e) dot.gif{}
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif   }

ExpandedSubBlockStart.gifContractedSubBlock.gif   
if (!http_request) dot.gif// 异常,创建对象实例失败
InBlock.gif
  window.alert("不能创建XMLHttpRequest对象实例.");
InBlock.gif  
return false;
ExpandedSubBlockEnd.gif   }

InBlock.gif   http_request.onreadystatechange 
= processRequest;
InBlock.gif   
// 确定发送请求的方式和URL以及是否同步执行下段代码
InBlock.gif
   http_request.open("GET", url, true);
InBlock.gif   http_request.send(
null);
ExpandedBlockEnd.gif  }

None.gif  
// 处理返回信息的函数
ExpandedBlockStart.gifContractedBlock.gif
   function processRequest() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif       
if (http_request.readyState == 4dot.gif// 判断对象状态
ExpandedSubBlockStart.gifContractedSubBlock.gif
           if (http_request.status == 200dot.gif// 信息已经成功返回,开始处理信息
InBlock.gif
               alert(http_request.responseText);
ExpandedSubBlockStart.gifContractedSubBlock.gif           }
 else dot.gif{ file://页面不正常
InBlock.gif
               alert("您所请求的页面有异常。");
ExpandedSubBlockEnd.gif           }

ExpandedSubBlockEnd.gif       }

ExpandedBlockEnd.gif   }

ExpandedBlockStart.gifContractedBlock.gif  function userCheck() 
dot.gif{
InBlock.gif   var f 
= document.form1;
InBlock.gif   var username 
= f.username.value;
ExpandedSubBlockStart.gifContractedSubBlock.gif   
if(username==""dot.gif{
InBlock.gif  window.alert(
"The user name can not be null!");
InBlock.gif  f.username.focus();
InBlock.gif  
return false;
ExpandedSubBlockEnd.gif   }

ExpandedSubBlockStart.gifContractedSubBlock.gif   
else dot.gif{
InBlock.gif  send_request(
'check1.jsp?username='+username);
ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif  }

None.gif 
None.gif 
</script>
None.gif 
<body>
None.gif  
<form name="form1" action="" method="post">
None.gif User Name:
<input type="text" name="username" value="">&nbsp;
None.gif 
<input type="button" name="check" value="check" onClick="userCheck()">
None.gif 
<input type="submit" name="submit" value="submit">
None.gif 
</form>
None.gif 
</body>
None.gif 
</html>
None.gif
None.gif  所有的JS都跟上一个例子一样,不同的只是对返回值的操作,这次是用alert来显示:alert(http_request.responseText);
None.gif
None.gif  我们来看处理逻辑JSP:
None.gif
None.gif 
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
None.gif 
<%
None.gif String username
= request.getParameter("username");
None.gif 
if("educhina".equals(username)) out.print("用户名已经被注册,请更换一个用户名。");
None.gif 
else out.print("用户名尚未被使用,您可以继续。");
None.gif 
%>
None.gif
None.gif  非常简单,先取得参数,然后作处理,最后将结果打印在out里。
None.gif  我们的第三个例子仍然以这个唯一性校验为例子,这次结合Struts开发框架来完成AJAX的开发。
None.gif
None.gif  四、基于Struts的AJAX
None.gif
None.gif  首先,我们仍然是对Struts应用来做配置,仍然是在struts
-config,xml文件里做配置,如下:
None.gif
None.gif 
<action type="com.ajax.CheckAction"
None.gif     scope
="request" path="/ajax/check">
None.gif     
<forward name="success" path="/check.jsp"/>
None.gif 
</action>
None.gif
None.gif
None.gif  跟普通的Struts应用的配置一样,只是没有ActionForm的配置。
None.gif
None.gif  下面是Action类:
None.gif
None.gif 
package com.ajax;
None.gif 
None.gif 
import java.io.PrintWriter;
None.gif 
None.gif 
import javax.servlet.http.HttpServletRequest;
None.gif 
import javax.servlet.http.HttpServletResponse;
None.gif 
None.gif 
import org.apache.struts.action.Action;
None.gif 
import org.apache.struts.action.ActionForm;
None.gif 
import org.apache.struts.action.ActionForward;
None.gif 
import org.apache.struts.action.ActionMapping;
None.gif 
import org.apache.struts.action.DynaActionForm;
None.gif 
ExpandedBlockStart.gifContractedBlock.gif 
/** *//**
InBlock.gif  * 
@author Administrator
InBlock.gif  *
InBlock.gif  * TODO To change the template for this generated type comment go to
InBlock.gif  * Window - Preferences - Java - Code Style - Code Templates
ExpandedBlockEnd.gif  
*/

None.gif 
public class CheckAction extends Action
ExpandedBlockStart.gifContractedBlock.gif 
dot.gif{
InBlock.gif  
public final ActionForward execute(ActionMapping mapping, ActionForm form,
InBlock.gif           HttpServletRequest request,
InBlock.gif           HttpServletResponse response)
InBlock.gif   
throws Exception
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif  System.out.println(
"hahadot.gifdot.gifdot.gifdot.gifdot.gifdot.gifdot.gifdot.gifdot.gifdot.gif.");
InBlock.gif  String username
= request.getParameter("username");
InBlock.gif  System.out.println(username);
InBlock.gif  String retn;
InBlock.gif  
if("educhina".equals(username)) retn = "Can't use the same name with the old use,pls select a differencedot.gif";
InBlock.gif  
else retn = "congraducation!you can use this namedot.gif.";
InBlock.gif  PrintWriter out
=response.getWriter();
InBlock.gif           out.write(retn);
InBlock.gif           out.close();
InBlock.gif  
return mapping.findForward("success");
ExpandedSubBlockEnd.gif   }

InBlock.gif  
public static void main(String[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif }

None.gif
None.gif  我们可以看到里面的逻辑跟上例中Servlet里的逻辑一样。最后,我们来看看JSP:
None.gif
None.gif 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
None.gif 
<html>
None.gif 
<head>
None.gif 
<title>Check.html</title>
None.gif 
None.gif 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
None.gif 
<meta http-equiv="description" content="this is my page">
None.gif 
None.gif 
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
None.gif 
None.gif 
</head>
None.gif 
<script type="text/javascript">
None.gif  var http_request 
= false;
ExpandedBlockStart.gifContractedBlock.gif  function send_request(url) 
dot.gif{//初始化、指定处理函数、发送请求的函数
InBlock.gif
   http_request = false;
InBlock.gif   file:
//开始初始化XMLHttpRequest对象
ExpandedSubBlockStart.gifContractedSubBlock.gif
   if(window.XMLHttpRequest) dot.gif{ file://Mozilla 浏览器
InBlock.gif
  http_request = new XMLHttpRequest();
ExpandedSubBlockStart.gifContractedSubBlock.gif  
if (http_request.overrideMimeType) dot.gif{//设置MiME类别
InBlock.gif
   http_request.overrideMimeType('text/xml');
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif   }

ExpandedSubBlockStart.gifContractedSubBlock.gif   
else if (window.ActiveXObject) dot.gif// IE浏览器
ExpandedSubBlockStart.gifContractedSubBlock.gif
  try dot.gif{
InBlock.gif   http_request 
= new ActiveXObject("Msxml2.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif  }
 catch (e) dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif   
try dot.gif{
InBlock.gif    http_request 
= new ActiveXObject("Microsoft.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif   }
 catch (e) dot.gif{}
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif   }

ExpandedSubBlockStart.gifContractedSubBlock.gif   
if (!http_request) dot.gif// 异常,创建对象实例失败
InBlock.gif
  window.alert("不能创建XMLHttpRequest对象实例.");
InBlock.gif  
return false;
ExpandedSubBlockEnd.gif   }

InBlock.gif   http_request.onreadystatechange 
= processRequest;
InBlock.gif   
// 确定发送请求的方式和URL以及是否同步执行下段代码
InBlock.gif
   http_request.open("GET", url, true);
InBlock.gif   http_request.send(
null);
ExpandedBlockEnd.gif  }

None.gif  
// 处理返回信息的函数
ExpandedBlockStart.gifContractedBlock.gif
   function processRequest() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif       
if (http_request.readyState == 4dot.gif// 判断对象状态
ExpandedSubBlockStart.gifContractedSubBlock.gif
           if (http_request.status == 200dot.gif// 信息已经成功返回,开始处理信息
InBlock.gif
               alert(http_request.responseText);
ExpandedSubBlockStart.gifContractedSubBlock.gif           }
 else dot.gif{ file://页面不正常
InBlock.gif
               alert("您所请求的页面有异常。");
ExpandedSubBlockEnd.gif           }

ExpandedSubBlockEnd.gif       }

ExpandedBlockEnd.gif   }

ExpandedBlockStart.gifContractedBlock.gif  function userCheck() 
dot.gif{
InBlock.gif   var f 
= document.forms[0];
InBlock.gif   var username 
= f.username.value;
ExpandedSubBlockStart.gifContractedSubBlock.gif   
if(username==""dot.gif{
InBlock.gif  window.alert(
"The user name can not be null!");
InBlock.gif  f.username.focus();
InBlock.gif  
return false;
ExpandedSubBlockEnd.gif   }

ExpandedSubBlockStart.gifContractedSubBlock.gif   
else dot.gif{
InBlock.gif  send_request(
'ajax/check.do?username='+username);
ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif  }

None.gif 
None.gif 
</script>
None.gif 
<body>
None.gif  
<form name="form1" action="" method="post">
None.gif User Name:
<input type="text" name="username" value="">&nbsp;
None.gif 
<input type="button" name="check" value="check" onClick="userCheck()">
None.gif 
<input type="submit" name="submit" value="submit">
None.gif 
</form>
None.gif 
</body>
None.gif 
</html>
None.gif
None.gif  我们可以看到,JSP基本是一样的,除了要发送的url:ajax
/check.do?username='+username。
None.gif

None.gif  最后,我们来看一个基于Struts和AJAX的复杂一些的例子,如果不用AJAX技术,UI的代码将十分复杂。
None.gif
None.gif  五、一个复杂的实例
None.gif
None.gif  这是一个比较复杂的级联:一共八个列表框,三个下拉框。从第一个列表框里选择到第二个列表框里后,第一个选择框里的选项是第二个列表框的选择;然后,在第一个选择框里选择以后,与选择值关联的一些选项出现在第三个列表框里。从第三个列表框里选择选项到第四个列表框里,同样,第二个选择框的选项也是第四个列表框的选项;如果对第二个选择框进行选择后,与选择值关联的一些选项出现在第六个列表框里,依次类推……
None.gif
None.gif  这个UI的逻辑就比较复杂,但使用了AJAX使得我们实现起来就简单多了,这个例子我们除了使用Action类,还要用到POJO类和Business类,然后我们扩展的话,可以通过Business类和数据库连接起来。
None.gif
None.gif  我们还是先看配置文件:
None.gif
None.gif 
<action type="com.ajax.SelectAction" 
None.gif     scope
="request" path="/ajax/select">
None.gif     
<forward name="success" path="/select.jsp"/>
None.gif 
</action>
None.gif
None.gif   然后看看Action类:
None.gif
ExpandedBlockStart.gifContractedBlock.gif 
/**//*
InBlock.gif /**
InBlock.gif  * Title : Base Dict Class
InBlock.gif  * Description : here Description is the function of class, here maybe multirows
InBlock.gif  * Copyright: Copyright (c) 2004
InBlock.gif  * @company Freeborders Co., Ltd.
InBlock.gif  * @Goal Feng       
InBlock.gif  * @Version     1.0 
ExpandedBlockEnd.gif  
*/

None.gif 
None.gif 
package com.ajax;
None.gif 
None.gif 
import java.io.PrintWriter;
None.gif 
import java.util.List;
None.gif 
None.gif 
import javax.servlet.http.HttpServletRequest;
None.gif 
import javax.servlet.http.HttpServletResponse;
None.gif 
None.gif 
import org.apache.struts.action.Action;
None.gif 
import org.apache.struts.action.ActionForm;
None.gif 
import org.apache.struts.action.ActionForward;
None.gif 
import org.apache.struts.action.ActionMapping;
None.gif 
ExpandedBlockStart.gifContractedBlock.gif 
/** *//**
InBlock.gif  * 
@author Administrator
InBlock.gif  *
InBlock.gif  * TODO To change the template for this generated type comment go to
InBlock.gif  * Window - Preferences - Java - Code Style - Code Templates
ExpandedBlockEnd.gif  
*/

None.gif 
public class SelectAction extends Action
ExpandedBlockStart.gifContractedBlock.gif 
dot.gif{
InBlock.gif  
public final ActionForward execute(ActionMapping mapping, ActionForm form,
InBlock.gif           HttpServletRequest request,
InBlock.gif           HttpServletResponse response)
InBlock.gif   
throws Exception
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif  response.setContentType(
"text/xml");
InBlock.gif        response.setHeader(
"Cache-Control""no-cache");
InBlock.gif        String type 
= request.getParameter("type");
InBlock.gif        String id 
= request.getParameter("id");
InBlock.gif        System.out.println(id);
InBlock.gif        StringBuffer sb
=new StringBuffer("<select>");
InBlock.gif        sb.append(
"<type>"+type+"</type>");
InBlock.gif        
InBlock.gif        List list 
= new SelectBusiness().getData(id);
InBlock.gif        
for(int i=0;i<list.size();i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif         SelectForm sel 
= (SelectForm)list.get(i);
InBlock.gif         sb.append(
"<text>"+sel.getText()+"</text><value>"+sel.getValue()+"</value>");
ExpandedSubBlockEnd.gif        }

InBlock.gif  
InBlock.gif        sb.append(
"</select>");
InBlock.gif        PrintWriter out
=response.getWriter();
InBlock.gif        out.write(sb.toString());
InBlock.gif        out.close();
InBlock.gif        System.out.println(sb.toString());
InBlock.gif  
return mapping.findForward("success");
ExpandedSubBlockEnd.gif   }

InBlock.gif  
public static void main(String[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif }

None.gif 
None.gif  POJO类和Business类:
None.gif 
package com.ajax;
ExpandedBlockStart.gifContractedBlock.gif 
/** *//**
InBlock.gif  * 
@author Administrator
InBlock.gif  *
InBlock.gif  * TODO To change the template for this generated type comment go to
InBlock.gif  * Window - Preferences - Java - Code Style - Code Templates
ExpandedBlockEnd.gif  
*/

None.gif 
public class SelectForm
ExpandedBlockStart.gifContractedBlock.gif 
dot.gif{
InBlock.gif  
private String text;
InBlock.gif  
private String value;
InBlock.gif 
ExpandedSubBlockStart.gifContractedSubBlock.gif  
/** *//**
InBlock.gif   * 
@return Returns the text.
ExpandedSubBlockEnd.gif   
*/

InBlock.gif  
public String getText()
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   
return text;
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockStart.gifContractedSubBlock.gif  
/** *//**
InBlock.gif   * 
@param text The text to set.
ExpandedSubBlockEnd.gif   
*/

InBlock.gif  
public void setText(String text)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   
this.text = text;
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockStart.gifContractedSubBlock.gif  
/** *//**
InBlock.gif   * 
@return Returns the value.
ExpandedSubBlockEnd.gif   
*/

InBlock.gif  
public String getValue()
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   
return value;
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockStart.gifContractedSubBlock.gif  
/** *//**
InBlock.gif   * 
@param value The value to set.
ExpandedSubBlockEnd.gif   
*/

InBlock.gif  
public void setValue(String value)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   
this.value = value;
ExpandedSubBlockEnd.gif  }

InBlock.gif  
public static void main(String[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif }

None.gif 
None.gif 
None.gif 
package com.ajax;
None.gif 
None.gif 
import java.util.ArrayList;
None.gif 
import java.util.List;
None.gif 
ExpandedBlockStart.gifContractedBlock.gif 
/** *//**
InBlock.gif  * 
@author Administrator
InBlock.gif  *
InBlock.gif  * TODO To change the template for this generated type comment go to
InBlock.gif  * Window - Preferences - Java - Code Style - Code Templates
ExpandedBlockEnd.gif  
*/

None.gif 
public class SelectBusiness
ExpandedBlockStart.gifContractedBlock.gif 
dot.gif{
InBlock.gif  
public List getData(String id)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   ArrayList list 
= new ArrayList();
InBlock.gif   
for(int i=1;i<6;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif  SelectForm form 
= new SelectForm();
InBlock.gif  form.setText(id
+i);
InBlock.gif  form.setValue(id
+i);
InBlock.gif  list.add(form);
ExpandedSubBlockEnd.gif   }

InBlock.gif   
return list;
ExpandedSubBlockEnd.gif  }

InBlock.gif 
InBlock.gif  
public static void main(String[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif }

None.gif
None.gif 

转载于:https://www.cnblogs.com/ctfzh/archive/2007/04/13/711925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值