struts ajax应用三 自动完成演示

html:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Auto Complete</title>
</head>
<style type="text/css">
.mouseOut{
background:#FFFFFF;
color:#000000;
}
.mouseOver{
background:#0066FF;
color: #000000;
}
</style>
<script type="text/javascript" language="javascript">
var xmlHttp;
//创建XMLHttp对象实例
function createXMLHttpRequest() {
 if (window.ActiveXObject) {//如果是IE
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
 } else if (window.XMLHttpRequest) {
  xmlHttp = new XMLHttpRequest();
 }
}

function initVars(){
inputField=document.getElementById("names");
nameTable=document.getElementById("name_table");
completeDiv=document.getElementById("popup");
nameTableBody=document.getElementById("name_table_body");
}

function findNames(){
initVars();
 if(inputField.value.length>=3){
  createXMLHttpRequest();
  var url="autocomplete.do?name="+escape(inputField.value);
  xmlHttp.open("GET",url,true);
  xmlHttp.onreadystatechange=callback;
  xmlHttp.send(null);
 }else{
 clearNames();
 }
}

function callback(){
 if(xmlHttp.readyState==4){//判断请求的状态(0=未初始化,1=正在加载,2=已经加载,3=交互,4=完成)
  if(xmlHttp.status==200){//判断Server的Http状态码(200对应 ok , 404对应Not Found,204对应返回空)
   
  var name=xmlHttp.responseXML.getElementsByTagName("name")[0].firstChild.data;
  setNames(xmlHttp.responseXML.getElementsByTagName("name"));
   
   
  }else if(xmlHttp.status==204){
   clearNames();
  }
 }
}

function setNames(the_names){
clearNames();
var size=the_names.length;
setOffset();
var row,cell,textNode;
 for(var i=0;i<size;i++){
 var textNode=the_names[i].firstChild.data;
 row=document.createElement("tr");
 cell=document.createElement("td");
 cell.οnmοuseοut=function(){this.className="mouseOut";};
 cell.οnmοuseοver=function(){this.className="mouseOver";};
 cell.setAttribute("bgcolor","#FFFAFA");
 cell.setAttribute("border","0");
 cell.οnclick=function(){populateName(this);};
 
 textNode=document.createTextNode(textNode);
 cell.appendChild(textNode);
 row.appendChild(cell);
 nameTableBody.appendChild(row);
 }
}

function setOffset(){
 var end=inputField.offsetWidth;
 var left=calculateOffsetLeft(inputField);
 var top=calculateOffsetTop(inputField)+inputField.offsetHeight;
 completeDiv.style.border="black 1px solid";
 completeDiv.style.left=left+"px";
 completeDiv.style.top=top+"px";
 completeDiv.style.width=end+"px";
}

function calculateOffsetLeft(field){
return calculateOffset(field,"offsetLeft");
}
function calculateOffsetTop(field){
return calculateOffset(field,"offsetTop");
}
function calculateOffset(field,attr){
var offset=0;
 while(field){
 offset+=field[attr];
 field=field.offsetParent;
 }
return offset;
}

function populateName(cell){
inputField.value=cell.firstChild.nodeValue;
clearNames();
}

function clearNames(){
var ind=nameTableBody.childNodes.length;
 if(ind>0){
 for(var i=ind-1;i>=0;i--){
 nameTableBody.removeChild(nameTableBody.childNodes[i]);
 }
 completeDiv.style.border="none";
 }
}

</script>
<body>
Names:
<input type="text" size="20" id="names" οnkeyup="javascript:findNames()" />
<div style="position:absolute;" id="popup">
<table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0">
<tbody id="name_table_body"></tbody>
</table>
</div>
</body>
</html>

 

server action:

 

package cxm.ajax;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;
import java.io.PrintWriter;
import java.util.ArrayList;

public class autoComplete extends Action{
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  String prefix=request.getParameter("name");
  ArrayList<String> findlist=findnamefun(prefix);
  if(findlist.size()>0){
  PrintWriter pout = response.getWriter();
  response.setContentType("text/xml");
  response.setHeader("Cache-Control", "no-cache");
  pout.println("<response>");
  for(String name: findlist){
   pout.println("<name>"+name+"</name>");
  }
  pout.println("</response>");
  pout.flush();
  pout.close();
  }else{
   response.setStatus(HttpServletResponse.SC_NO_CONTENT);
  }
  
  return null;
 }
 
 public static ArrayList<String> findnamefun(String par){
  ArrayList<String> haslist=new ArrayList<String>();
  ArrayList<String> returnlist=new ArrayList<String>();
  haslist.add("cxmcyq");
  haslist.add("cxmcyqall");
  haslist.add("cxmcyqplay");
  haslist.add("cxmcyqlove");
  haslist.add("cxm");
  haslist.add("cxmcy");
  haslist.add("cxmcyq");
  haslist.add("cyq");
  haslist.add("cyqicxm");
  for (int i = 0; i < haslist.size(); i++) {
   if(haslist.get(i).toString().toLowerCase().startsWith(par.toLowerCase())){
    returnlist.add(haslist.get(i).toString());
   }
  }
  
  return returnlist;
 }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值