ExtJs_Combo的实时检索

  项目里有个功能,需要提供一些商铺的名称.一开始的思路是按照地区分类,挺好的.但是测试数据没有那么多,所以就没有发现这个问题.combo的下拉是有限制的,而且一次性所能接受的数据源大小也有限制.启动页面就卡死,报错~这可怎么办? 无奈之下加了个分页,但是多了之后忽然发现每个页20个结果,随便一列也都1K多了啊~ 这要是真心找起来多浪费功夫啊.于是就想到能不能根据输入的去模糊查询.毫无疑问,这是可行的~ 但是不知道是我搜索不得法还是怎么的,发现找的好多的模糊匹配的就是载入到local,然后去匹配...这尼玛,不是一样的效果么?依然卡死.后来看extjs的API发现combo有几个叼叼的属性啊.分分钟出结果.还是前人说的好,人最大的努力就是去做那些自己认为不会不能成功的事情,因为做完回头看会忽然发现,啊哈~不过如此嘛.

  闲话不多说,先贴代码咯.下面这就是  xtype:‘combo‘ 的正常属性

 1            xtype : ‘combo‘,
 2                 fieldLabel : ‘店铺名称‘,
 3                 valueField : ‘id‘,
 4                 displayField : ‘text‘,
 5                 hiddenName : ‘shopid‘,
 6                 id : ‘x_shopid‘,
 7                 name : ‘shopid‘,
 8                 store : shop_store,
 9
10                 editable : true,//允许编辑
11                 minChars : 1,//开始查询最小字符数
12                 mode : ‘remote‘, //查询模式  local为本地数据源  remote为远程服务端
13                 typeAhead : false,//允许自动选择匹配项  经过延时typeAheadDelay后
14 //              typeAheadDelay:200,//经过指定毫秒后 自动选择匹配选项 默认250毫秒
15                 triggerAction : ‘all‘, //触发器被激活时执行的动作。使用‘all‘来运行由allQuery属性指定的查询(默认为‘query‘)  param{ Query : XXX}
16                 pageSize : 10, //分页大小
17 //              readOnly:true,
18                 listWidth : 250, //下拉框宽度
19
20                 displayField : ‘text‘,
21                 anchor : ‘90%‘

  注意到 mode : ‘remote‘  这个属性.  必须定义成remote 从服务器获取数据源 如果改成local本地的话...哈哈~那就啥都看不到呗.然后是typeAhead 这个是允许自动匹配的,一般就是符合要求的条件自动匹配第一个. 延时默认250毫秒,但是可以自己通过typeAheadDelay指定哈.    pageSize也加着吧,不然容易出事儿.  truggerAction是一个指定触发器被激活时候执行的动作,默认查询参数是query...  等同于param{querty:xxx}...当然了,最重要的是:editable要为true~  别问我为啥...

  数据源就没啥好看的了.

 1     shop_store=new Ext.data.Store({
 2         // autoLoad : true,
 3         reader : new Ext.data.JsonReader({
 4                     totalProperty : "totalCount",
 5                     root : ‘result‘
 6                 }, Ext.data.Record.create([{
 7                             name : ‘id‘
 8                         }, {
 9                             name : ‘text‘
10                         }])),
11         proxy : new Ext.data.HttpProxy({
12                 url : Ext.getDom(‘root‘).value+ ‘/helper/helper!shopCombox.do?bizloc=‘+Ext.getCmp(‘c_adbizloc‘).getValue()
13                         })
14     });

  定义一个var shop_store=new Ext.data.Store();  然后后就完事大吉了~然后就是后面的查询分页

 1     public void shopCombox() throws Exception {
 2
 3
 4         if (!"".equals(this.getRequest().getParameter("query"))&&null!=this.getRequest().getParameter("query")) {
 5         List<ShopInfo> list = dataCacheUtil.getShopList(this.getRequest().getParameter("query"));
 6
 7         if (list.size()==0) {//如果暂无商家防止空值异常
 8             ShopInfo f=new ShopInfo();
 9             f.setId("");
10             f.setShopname("查无相关结果");
11             list.add(f);
12 //            printJson("{\"result\":[],\"totalCount\":0}" );
13 //            return;
14         }
15
16         int start = Integer.parseInt(this.getRequest().getParameter("start")); //开始数
17         int limit = Integer.parseInt(this.getRequest().getParameter("limit")); //间隔数
18
19         PrintWriter out = this.getResponse().getWriter();
20         int totalcount = list.size();
21
22         int end=start+limit;//防止尾页越界
23         if (list.size()<end) {
24             end=list.size();
25         }
26
27         List<ShopStore> li=new ArrayList<ShopStore>();
28         ShopStore s=null;
29
30         for (int i = start; i < end; i++) {
31             s=new ShopStore();
32             s.setId(list.get(i).getId());
33             s.setText(list.get(i).getShopname());
34             li.add(s);
35         }
36
37         JSONArray jsonObject = JSONArray.fromObject(li);
38         JSONObject reqObject = new JSONObject();
39         reqObject.element("result", jsonObject);
40         int totalPageCount = (int) Math.ceil((double) totalcount / 10);
41         reqObject.element("totalPageCount", totalPageCount);
42         reqObject.element("countPerPage", this.getRequest().getParameter(
43                 "limit"));
44         reqObject.element("totalCount", totalcount);// pages为总页数。
45         out.print(reqObject.toString());
46
47     }else{
48         printJson("{\"result\":[],\"totalCount\":0}" );
49         return;
50     }
51
52     }    

  之后就是sql了  后面查询出的结果放到list里面,传回来  List<ShopInfo> list = dataCacheUtil.getShopList(this.getRequest().getParameter("query")); 分分钟搞定啊!启动页面再一实验,哇哈哈哈.搞定了~ 当然,还有一个问题就是如果相似结果太多的话也会有很多页,但是有分页拦着,一般也不会太差劲吧.稍后的话可以继续优化一下.

  W  _叶落星辰

时间: 2024-10-14 17:03:57

ExtJs_Combo的实时检索的相关文章

实时检索6700亿条推文,细谈Twitter搜索引擎的演进历程

Twitter的实时搜索引擎起步于一家被收购的小公司,随着流量的增长.功能的增加和服务对象的扩张,搜索引擎不断面临着新的挑战,设计经历了多次变化.本演讲将介绍该实时搜索引擎进化历程中的挑战和决策. 王天, Twitter Senior Staff Engineer, 2003年清华计算机系本科毕业并赴美留学,2005年硕士毕业后加入Google,在Mobile Search.News以及Search Quality等部门从事过近六年开发.2011年初加盟Twitter,参与了Twitter实时相

HBase 实战(2)--时间序列检索和面检索的应用场景实战

前言: 作为Hadoop生态系统中重要的一员, HBase作为分布式列式存储, 在线实时处理的特性, 备受瞩目, 将来能在很多应用场景, 取代传统关系型数据库的江湖地位. 本篇主要讲述面向时间序列/面检索的应用场景时, 如何利用HBase的特性去处理和优化. 构造应用场景 某气象局对各个站点的信息进行采集和汇总, 这些信息包括站点id, 时间点, 采集要素(要素特别多). 然后对这些采集的数据, 提出如下检索需求: 1). 时间序列检索(检索出该站点的在某个时间范围内的全要素信息) 2). 面检

移动端(html5)微信公众号下用keyup实时监控input值的变化无效

搜索框依据用户输入的值实时检索,一开始自然而然想到keyup,在拼音状态时,啥问题也没有, 问题1:切换到中文输入法,问题出来了,keyup事件不灵便了,后来在网上搜了下,找到了思路, 问题2:微信公众平台开发时,客户提需求“输入框中输入内容时,输入框后边显示清除按钮,清除输入框中的内容”,使用“keyup”事件时在中文输入法下部分按键keyup事件无效, 方法一:主要是给搜索框注册focus事件,隔个时间去检索下,贴出代码 <script language="javascript&quo

Twitter实时搜索系统EarlyBird

twitter对存档的tweet使用lucene做全量索引,新发的推文则是实时索引,实时检索(10秒之内索引).实时索引和检索系统叫EarlyBird. 感觉写得比较清楚简洁,只要这些信息足够真实可信,完全可以做实现参考. 我简单做了几个记录: 1)基于lucene + java,michael busch是lucene committer 2)词典直接用哈希表,因此不支持term的prefix,偏序查询,哈希表使用开放链址法实现,避免大量小对象gc开销 3)postings列表在optimiz

Zabbix与ELK整合实现对日志数据的实时监控

4.2.zabbix平台配置日志告警 一. ELK与zabbix有什么关系? ELK大家应该比较熟悉了,zabbix应该也不陌生,那么将ELK和zabbix放到一起的话,可能大家就有疑问了?这两个放到一起是什么目的呢,听我细细道来. ELK是一套日志收集套件,它其实有由Elasticsearch.Logstash和Kibana三个软件组成,通过ELK可以收集系统日志.网站日志.应用系统日志等各种日志数据,并且还可以对日志进行过滤.清洗,然后进行集中存放并可用于实时检索.分析.这是ELK的基础功能

呼叫中心项目学习总结

这几天一直在学习呼叫中心项目视频教程,跟着学习了下这个项目的一些关键知识点,现在回顾梳理一下重点: 一.三层架构设计+代码生成器: 复杂项目不能把SQL语句直接写到程序里,不模块化.难以维护,应该采用三层架构.三层的优点:UI层和BLL打交道,不用处理SQL语句:UI层(界面代码,就是写到Form中的代码)访问的都是强类型的对象,而不是row["age"]这样的东西,开发更方便,更不容易出错.一般三层的代码都是一个人写:UI层中没有复杂的代码,解耦,容易改变UI层技术.关于这个不用多说

大规模Elasticsearch集群管理心得

转载:http://elasticsearch.cn/article/110 ElasticSearch目前在互联网公司主要用于两种应用场景,其一是用于构建业务的搜索功能模块且多是垂直领域的搜索,数据量级一般在千万至数十亿这个级别:其二用于大规模数据的实时OLAP,经典的如ELKStack,数据规模可能达到千亿或更多. 这两种场景的数据索引和应用访问模式上差异较大,在硬件选型和集群优化方面侧重点也会有所不同.一般来说后一种场景属于大数据范畴,数据量级和集群规模更大,在管理方面也更有挑战. 应Me

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,

开发之技能

软件开发之技能梳理 编程开发本质是运用程序和计算机来解决现实中的各种问题,因此,编程开发人员的才智发挥载体是计算机或者说计算设备,直接武器是程序.程序员用来进行编程开发所需要的技能,归结起来主要如下: 1.  理解计算模型和框架: 顺序计算.并发计算 (并行计算.分布式计算): 理解应用所基于的计算模型和框架是非常重要的.传统应用通常基于顺序计算,而现代商业应用,比如云计算,通常基于分布式计算架构: 大规模的科学计算应用, 比如基因序列计算, 则基于并行计算. 2.  高效的数据处理:熟悉常用数