需要做一个text的自动提示功能,于是翻翻jquery 的书,看了一个叫做autocomplete的插件,决定试一试怎么使用.上google搜索了一下插件(开始搜索的是山寨版本的,导致自己的ajax无法调用action,那个郁闷啊).最后还是去jquery的官网上,下载了demo和源码.闲话不说,开始写代码:
1.html页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>Auto Complete 4.1 (backwards compatible file)</title>
<script type='text/javascript' src='js/jquery-1.4.2.js'></script>
<script type='text/javascript' src='js/jquery.autocomplete.js'></script>
<link rel='stylesheet' type='text/css' href='style/jquery.autocomplete.css' />
<script type='text/javascript'>
$(document).ready(function()
{
$("#queryCon").autocomplete("autoComplete.action",
{
minChars: 1,
max:5,
width: 150,
matchContains: true,
autoFill: false,
//如果需要另外传值给action的话可以用这样的方式,如果只是把input里面的值传递给action的话,可以不写
extraParams:
{
queryCon: function()
{
return $("#queryCon").val();
}
},
//进行对返回数据的格式处理
parse: function(test)
{
//content为我action里面定义的值
data = test.content;
var rows = [];
for(var i=0; i<data.length; i++)
{
rows[rows.length] =
{
//我没有特殊的要求,所以三个写的一样
data:data[i],
value:data[i],
//result里面显示的是要返回到列表里面的值
result:data[i]
};
}
return rows;
},
formatItem:function(item)
{
//我没有特殊的要求,直接返回了
return item;
}
});
});
</script>
</head>
<body>
<input type='text' style='width: 300px;' id='queryCon'
name="queryCon" />
<input type='submit' value="All Values" />
</body>
</html>
2.action部分
package com.training.util;
import java.util.LinkedList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.opensymphony.xwork2.ActionSupport;
import com.training.hibernate.User;
public class AutoCompleteAction extends ActionSupport {
private List<String> content;
public List<String> getContent() {
return content;
}
public void setContent(List<String> content) {
this.content = content;
}
private String queryCon;
public void setQueryCon(String queryCon) {
this.queryCon = queryCon;
}
public String getQueryCon() {
return queryCon;
}
@Override
public String execute() throws Exception {
//回出现中文乱码传值的问题,所以需要再编码
,不过很奇怪,我写了filter了,不知道为什么还需要这样
queryCon = new String(queryCon.getBytes("ISO-8859-1"), "UTF-8");
Session session = HibernateSessionFactory.getSession();
Query query = session
.createQuery("select name from User as user where user.name like ? ");
query.setString(0, this.queryCon + "%");
List<String> list = query.list();
this.setContent(list);
session.close();
return SUCCESS;
}
}
3.struts.xml
<package name="login" extends="json-default">
<action name="autoComplete" class="com.training.util.AutoCompleteAction">
<result type="json"/>
</action>
</package>
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/huangxu0311/archive/2010/04/28/5539413.aspx