文件一览
- autocomplete.html
- AutoCompleteServlet.java
- NameService.java
autocomplete.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax Auto Complete</title>
<style type="text/css">
.mouseOut {
background:#708090;
color:#FFFAFA
}
.mouseOver {
background:#FFFAFA
color:#000000;
}
</style>
<script type="text/javascript">
var xmlHttp;
var completeDiv;
var inputField;
var nameTable;
var nameTableBody;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function initVars() {
completeDiv = document.getElementById("popup");
inputField = document.getElementById("names");
nameTable = document.getElementById("name_table");
nameTableBody = document.getElementById("name_table_body");
}
function findNames() {
initVars();
if (inputField.value.length>0) {
createXMLHttpRequest();
var url="AutoCompleteServlet?names="+escape(inputField.value);
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange = callback;
xmlHttp.send(null);
} else {
clearNames();
}
}
function callback() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
//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;
setOffsets();
var row,cell,txtNode;
for (var i=0;i<size;i++) {
var nextNode=the_names[i].firstChild.data;
row = document.createElement("tr");
cell =document.createElement("td");
cell.onmouseout=function() {this.className='mouseOver';};
cell.onmouseOver=function() {this.className='mouseOut'};
cell.setAttribute("bgcolor","#FFFAFA");
cell.setAttribute("border","0");
cell.onclick=function() {populateName(this)};
txtNode=document.createTextNode(nextNode);
cell.appendChild(txtNode);
row.appendChild(cell);
nameTableBody.appendChild(row);
}
}
function setOffsets() {
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";
nameTable.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;
for (var i = ind -1;i>=0;i--) {
nameTableBody.removeChild(nameTableBody.childNodes[i]);
}
completeDiv.style.border = "none";
}
</script>
</head>
<body>
<h1>Ajax Auto Complete Example</h1>
Name:<input type="text" size="20" id="names" onkeyup="findNames();" style="height:20;"/>
<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>
AutoCompleteServlet.java
package ajaxbook.chap4;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AutoCompleteServlet extends HttpServlet {
private List names = new ArrayList();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String prefix = req.getParameter("names");
NameService service = NameService.getInstance(names);
List matching = service.findNames(prefix);
if (matching.size()>0) {
PrintWriter out = resp.getWriter();
resp.setContentType("text/xml");
resp.setHeader("Cache-Control", "no-cache");
out.println("<response>");
Iterator it = matching.iterator();
while(it.hasNext()) {
String name = (String)it.next();
out.println("<name>"+name+"</name>");
}
out.println("</response>");
matching = null;
service = null;
out.close();
} else {
resp.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
}
@Override
public void init(ServletConfig config) throws ServletException {
names.add("Abe");
names.add("Abel");
names.add("Abigail");
names.add("Abner");
names.add("Abraham");
names.add("Marcus");
names.add("Marcy");
names.add("Marge");
names.add("Marie");
}
}
NameService.java
package ajaxbook.chap4;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class NameService {
private List names;
public NameService(List names) {
this.names = names;
}
public static NameService getInstance(List names) {
return new NameService(names);
}
public List findNames(String prefix) {
String prefix_upper = prefix.toUpperCase();
List matches = new ArrayList();
Iterator it = names.iterator();
while(it.hasNext()) {
String name = (String)it.next();
String name_upper_case = name.toUpperCase();
if (name_upper_case.startsWith(prefix_upper)) {
boolean result = matches.add(name);
}
}
return matches;
}
}
运行效果参照附件:
- 大小: 15.3 KB
分享到:
相关推荐
提供的DEMO文件可能包含了一个简单的Ajax自动完成的示例。通常,DEMO会包括HTML、JavaScript和ASP代码,以及可能的CSS样式文件。HTML文件用于展示界面和绑定事件;JavaScript文件实现Ajax逻辑,与服务器交互;ASP...
总结来说,这个项目提供了一个实用的示例,展示了如何利用Ajax、JSP和Servlet技术实现一个无数据库的自动完成功能,对于学习和理解这些技术的应用有很好的参考价值。开发者可以通过研究这个源代码,学习到如何在实际...
【Ajax自动完成技术详解】 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术使得用户可以与网页进行更流畅、更快捷的交互,提高了用户体验。在本...
**Ajax控件自动完成(AutoComplete)** Ajax控件自动完成是一种常见的前端技术,它显著提高了用户在网页上的交互体验,特别是在输入数据时。在网页的搜索框或用户登录界面,这种技术尤其有用,因为它能预测并显示...
这个文本框自动完成示例是Ajax技术的一个经典应用,它实现了用户在输入文本时,系统能够实时根据输入内容提供匹配建议,提高了用户体验,减少了用户输入的错误率。 在创建Ajax文本框自动完成示例时,我们需要考虑...
帮助用户快速的进行搜索,这类功能成为自动完成功能,这个功能目前在很多软件中实现,而web程序程序只能通过浏览器自身实现. 看完本项目,你将学习到如何实现基于ajax的自动完成功能,项目使用的是vs2003 ....
看完本项目,你将学习到如何实现基于ajax的自动完成功能,本项目使用的是vs2003开发,直接解压到IIS目录下. 补充说明: 在上次项目的基础上进行的更新,把自动完成功能和textbox控件结合起来,成为一个自定义控件,...
综上所述,"jsp+Ajax表单自动完成"是一个融合了前后端技术的交互式Web开发实践,它利用JSP处理服务器端逻辑,Ajax实现无刷新数据通信,以及JavaScript和相关库增强用户体验。通过这些技术,我们可以构建出类似Google...
1. **Ajax自动补全的基本原理**:自动补全功能通常用于搜索框或输入字段,当用户输入字符时,服务器会实时返回匹配的数据,这些数据可以是建议的搜索词、用户列表或其他相关信息。Ajax通过异步请求在后台处理这些...
标题中的“输入框自动完成AJAX”是一种常见的前端开发技术,用于提高用户在网页上的输入效率。自动完成功能,也称为自动填充或建议输入,它根据用户在输入框中键入的内容,动态地提供可能的匹配选项。这种功能在搜索...
标题 "Ajax+JSON 搜索框自动完成提示功能" 涉及的是网页开发中的一个常见技术,用于提高用户输入体验。Ajax(异步JavaScript和XML)是Web开发中的一种技术,它允许页面在不重新加载整个页面的情况下与服务器交换数据...
在本文中,我们将深入探讨如何使用Ajax实现文本框的自动完成功能,这通常是一个用户友好的特性,可以极大地提升用户体验。该示例中,我们将关注的关键知识点包括.NET框架、Ajax控件库、文本框事件处理以及与数据库的...
在C#和AJAX开发中,自动完成控件是一种常见的用户界面组件,它极大地提高了用户的输入效率和体验。这种控件通常用于搜索框,当用户输入文本时,它会实时地提供与输入相匹配的建议列表。在这个场景下,"c#ajax 自动...
本实例将探讨如何利用AJAX根据用户输入的邮编实现自动完成地址信息的功能,这在地图应用、电子商务网站或任何需要地理位置信息的系统中都非常常见。 首先,我们要了解AJAX的基本工作原理。它通过JavaScript创建...
在网页应用中,AJAX自动完成功能通常用于提升用户体验,比如在用户输入时,后台实时搜索匹配数据并显示在输入框下方,常见的应用场景如搜索引擎、表单字段填充等。这种功能可以显著减少用户输入的时间,提高数据输入...
在网页开发中,自动完成(AutoComplete)功能是一种常见的用户体验优化技术,它允许用户在输入时获取...提供的源码应该包含了这些实现细节,你可以通过分析和调试源码来进一步理解AJAX自动完成的工作原理和实现方式。
- **JavaScript库**:实现AJAX自动完成功能,常见的JavaScript库有jQuery、Prototype、Dojo等,它们提供了方便的API来操作DOM和发送AJAX请求。 - **前端框架**:现代前端框架如React、Vue或Angular也提供了构建此类...
在本案例中,“Ajax自动完成”指的是在用户在表单的文本输入框中输入内容时,通过Ajax技术从服务器获取匹配的建议列表,以帮助用户快速、准确地填写信息。这种功能常见于搜索框、地址输入、用户名验证等场景,极大地...
这个文件名暗示了压缩包中可能包含实现AJAX自动完成功能的代码示例、教程或库。可能包括HTML文件用于展示前端界面,JavaScript文件用于处理AJAX请求和DOM操作,以及C#代码文件处理服务器端逻辑。 在实现AJAX自动...
在网页开发中,实现“仿Google搜索”的AJAX自动完成功能是一项常见的需求。这个功能使得用户在输入搜索关键词时,无需点击搜索按钮,就能即时看到包含该关键词的相关搜索建议,极大地提升了用户体验。这里我们将深入...