189 8069 5689

Struts2结合jqueryautocomplet插件实现自动提示详解

在网上会有很多关于struts2结合autocomplet插件的实例,但是不怎么完整,让人感觉不清楚,刚刚在公司做了一个关于这个的项目,页面也用到了这个插件,所以把详细的步骤和注意事项贴出来和大家分享,废话不多说,贴铁代码:本文代码下载地址:http://download.csdn.net/detail/harderxin/4504612

创新互联专注于网站建设,为客户提供成都网站制作、成都网站设计、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,品牌网站制作,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。

一、我的资源中有autcomplet的json实例和autocomplet的源代码,也是copy网上的,大家可以免费下载,下载地址:http://download.csdn.net/detail/harderxin/4504288

二、开始我们的案例旅程

  1、编写页面index.jsp

	  		自动提示:  		  		  		  		


      显示效果如下:

    Struts2结合jquery autocomplet插件实现自动提示详解

注意:

autocomplete="off"是为了防止有些浏览器自动文本框输入提示,onkeyup="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,''),是不允许输入不合法  的字符,例如。,?【】{}等等    2、将我们的jquery和autocomplet插件引入到页面中        3、在index.jsp中编写js脚本函数:    

4、编写我们的Action类
package com.foodproject.test.action;    import java.util.ArrayList;  import java.util.List;  import java.util.Map;    import javax.servlet.http.HttpServletResponse;    import org.apache.struts2.ServletActionContext;  import org.json.JSONException;    public class SearchAction {  	private String keyQuery;//前台传过来的文本框中的值  	private String fast;//条件参数  	private String jsonResult;//用于接收json数据,传到前台页面可以直接用result中的item接收  	//数据格式为["abc","sawe","wewe","中国","人们"]  	public String getKeyQuery() {  		return keyQuery;  	}  	public void setKeyQuery(String keyQuery) {  		this.keyQuery = keyQuery;  	}  	public String getFast() {  		return fast;  	}  	public void setFast(String fast) {  		this.fast = fast;  	}  	public String getJsonResult() {  		return jsonResult;  	}  	public void setJsonResult(String jsonResult) {  		this.jsonResult = jsonResult;  	}  	public String search()throws Exception{  		//这里用list模拟数据,当然在实际项目中我们则是从数据库中取数据然后转换  		List list=new ArrayList();  		list.add("abc");  		list.add("sdeasd");  		list.add("中国");  		list.add("人们");  		list.add("而qa");  		this.jsonResult=parseResNameResult(list);//将数据转换为相应的json格式数据  		HttpServletResponse response=ServletActionContext.getResponse();  		response.setCharacterEncoding("UTF-8");  		response.setContentType("text/plain");  		response.getWriter().print(jsonResult);//传到前台页面,ajax请求  		return null;  	}  	  	//定义转换函数  	private String parseResNameResult(List list)throws JSONException{  		Map map=null;  		StringBuffer buffer=new StringBuffer("[");  		for(int i=0;i2){  			buffer.deleteCharAt(buffer.length()-1);  		}  		buffer.append("]");  		return buffer.toString();  	}    }  

5、部署到服务器进行测试,当我们在文本框中输入a时,则提示信息会出现abc、sdeasd、而qa,并且我们不用去考虑样式和编写div层,还有鼠标经过以及鼠标点击事件
的处理,因为autocomplet插件已经帮我们处理好了。

6、中文问题处理(copy)
jQuery.Autocomplete是jquery的流行插件,能够很好的实现输入框的自动完成(autocomplete)、建议提示(input suggest)功能,支持ajax数据加载。
但唯一遗憾的是,在对中文输入法打开时,firefox3.0中是对中文拼音的自动匹配,而对输入后的中文无法及时触发匹配;而在我的IE6.0下,则无此问题。

原因分析:
Autocomplete插件对用户输入字符的触发自动匹配是通过”keydown”事件进行的(可分析 jquery.autocomplete.js第92行),在IE6中,当输入法打开时,输入的字符是不会触发”keydown”的,只有中文输入完毕才触发之,所以中文输入和latin文没有区别的;但在firefox3.0下,无论输入法打开否,按键都会触发”keydown”事件,所以造成中文输入完毕,自动匹配的是刚才打出的部分中文拼音字母。

解决方法:
网上查到的最多做法是修改jquery.autocomplete.js第92行,将”keydown”替换为”keyup”,但这个不是根本办法,虽然这样改后可在firefox中及时对输入的中文进行自动匹配,但将原插件中回车、tab等重要的事件机制破坏了,比如这样改后,如果你的input是在一个form里的话,回车从原来的将选定项输入到input中变为了直接提交form表单了,这并不是我们想要的。
我的方法原理是,补充一个原插件触发查询的事件,就是当input输入栏发生字符变化时,重新进行查询(调用其内部的onChange函数),这里主要针对firefox而言,因为我们的系统访问最多的是IE和firefox。而恰好firefox有一个input变化的事件就是oninput,那么我们只要在原jquery.autocomplete.js第199行,插入如下代码:
  

.bind("input", function()

{   

      onChange(0, true);   

});  

添加代码后的autocomplet源文件代码为:
.bind("unautocomplete", function() {  		select.unbind();  		jQueryinput.unbind();  		jQuery(input.form).unbind(".autocomplete");  	}).bind("input",function(){  		onChange(0,true);  	});

7、大家看一下autocomplet的源代码,然后自己在做一下测试,里面还有很多的函数值得我们去研究,提示信息基本上实现了,欢迎大家共同探讨交流。
  
全文实例代码下载:http://download.csdn.net/detail/harderxin/4504612              
 

  
  
  
  
            
            
                        
名称栏目:Struts2结合jqueryautocomplet插件实现自动提示详解
文章出自:http://cdxtjz.com/article/gjijso.html

其他资讯