两种形式:字符串 和 ajax
jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/my.js"></script>
<!-- 引入jquery -->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
//绑定键盘抬起事件
$("#nameId").keyup(function(){
//先清空大div下所有的子元素 empty()删除匹配的元素集合中所有的子节点。
$("#content").empty();
var url="${pageContext.request.contextPath}/product";
//获取到文本框的值
var val=$(this).val();
var jsonData={"pname":val,"method":"findPname"};
//发送异步的请求,获取用户输入的值,发送服务器端
$.post(url,jsonData,function(data){
//怎么处理
//先切分
var pnames=data.split(",");
//编写循环
for(var i=0;i<pnames.length;i++){
//获取到数据
var pname=pnames[i];
//创建div
var $div=$("<div></div>");
$div.text(pname);
//创建div后,可以给div绑定事件
$div.bind("mouseover",function(){
$(this).css("backgroundColor","red");
});
$div.bind("mouseout",function(){
$(this).css("backgroundColor","white");
});
//点击事件
$div.bind("click",function(){
$("#nameId").val($(this).text());
//把所有小div清空
$("#content").empty();
});
$("#content").append($div);
}
//让大div显示出来
$("#content").show();
});
});
//使用json数据的格式
$("#nameId").keyup(function(){
$("#content").empty();
var url="${pageContext.request.contextPath}/product";
var val=$(this).val();
var jsonData={"pname":val,"method":"findPnameByJson"};
$.post(url,jsonData,function(data){
//data是Json对象 {"list":[{"pname":"编程思想2","pnum":10,"price":88}]}
//获取到数组
var lists=data.list;
//遍历
for(var i=0;i<lists.length;i++){
//获取每一个商品的对象
var product=lists[i];
//通过属性获取值
var pname=product.pname;
var $div=$("<div></div>");
$div.text(pname);
//每创建一个div,添加一个事件
$div.bind("mouseover",function(){
$(this).css("backgroundColor","red");
});
$div.bind("mouseout",function(){
$(this).css("backgroundColor","white");
});
//每个小div的点击事件
$div.bind("click",function(){
$("#nameId").val($(this).text());
$("#content").empty();
});
$("#content").append($div);
}
$("#content").show();
},"json");
});
});
</script>
<div id="divmenu">
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=文学">文学</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=生活">生活</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=计算机">计算机</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=外语">外语</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=经营">经管</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=励志">励志</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=社科">社科</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=学术">学术</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=少儿">少儿</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=艺术">艺术</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=原版">原版</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=科技">科技</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=考试">考试</a>
<a
href="${pageContext.request.contextPath}/product?method=findByPage2&category=生活百科">生活百科</a>
<a href="${pageContext.request.contextPath}/product?method=findByPage" style="color:#FFFF00">全部商品目录</a>
</div>
<div id="divsearch">
<form action="${pageContext.request.contextPath}/" method="post">
<table width="100%" border="0" cellspacing="0">
<tr>
<td style="text-align:right; padding-right:220px">
<!-- 完成案例 -->
Search <input type="text" name="name" class="inputtable" id="nameId" />
<input type="image" src="images/serchbutton.gif" border="0" style="margin-bottom:-4px">
</td>
</tr>
</table>
</form>
</div>
<!-- 现在是隐藏的,用来存储书的名称的 -->
<div id="content" style="background-color:white;width:128px; text-align:left;margin-left:859px;color:black;float:left;margin-top: -20px;display: none">
<!-- 显示提醒 -->
<div></div>
<div></div>
</div>
ProductServlet:
/**
* 异步的方式获取图书的名称
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findPname(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求的参数
String pname=request.getParameter("pname");
//假如书的名称是空的
if(pname==null || pname.trim().isEmpty()){
return;
}
//通过图书的名称去查询数据库
ProductService ps=new ProductService();
List<Object> list=ps.findPname(pname);
//如果没有查询到结果
if(list==null || list.size()==0){
return;
}
StringBuffer sb=new StringBuffer();
//响应的字符串
for(Object str:list){
sb.append(str);
sb.append(",");
}
//数据 =编程思想,故事会,核心技术,
String msg=sb.toString();
//去掉末尾的(也可以不去)
msg=msg.substring(0,msg.length()-1);
//响应字符串
response.getWriter().print(msg);
}
/**
* 使用json的方式获取图书的
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findPnameByJson(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pname=request.getParameter("pname");
if(pname==null || pname.trim().isEmpty()){
return;
}
ProductService ps=new ProductService();
//通过商品的名称,查询符合名称的所有所有商品
List<Product> list=ps.findPnameByJson(pname);
//使用Jsonlib的工具类,把list转成Json字符串
//使用jsonObject
JSONObject j=new JSONObject();
j.put("list", list);
//生成字符串
String result=j.toString();
//{"list":[{"category":"计算机","description":"这书比较难!","imgUrl":"","pid":"e865ad86-7ae7-4ce5-84a3-8df890895b71","pname":"编程思想2","pnum":10,"price":88}]}
System.out.println(result);
response.getWriter().print(result);
}
ProductService:
/**
* 通过用户输入的图书名称查找图书
* @param pname
* @return
*/
public List<Object> findPname(String pname) {
ProductDao dao=new ProductDao();
return dao.findPname(pname);
}
/**
* 通过商品的名称,查询符合名称的所有所有商品
* @param pname
* @return
*/
public List<Product> findPnameByJson(String pname) {
ProductDao dao=new ProductDao();
return dao.findPnameByJson(pname);
}
ProductDao:
/**
* 通过用户输入的图书名称查找图书
* @param pname
* @return
*/
public List<Object> findPname(String pname) {
QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());
String sql="select pname from products where pname like ?";
try {
return runner.query(sql, new ColumnListHandler(),pname+"%");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//通过商品的名称,查询符合名称的所有所有商品
public List<Product> findPnameByJson(String pname) {
QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());
String sql="select * from products where pname like ?";
try {
return runner.query(sql, new BeanListHandler<Product>(Product.class),pname+"%");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}