当前位置:编程学习 > JAVA >>

jQuery学习笔记--jqGrid的单字段和多字段查询 详解

 

首先说明一下,什么是jqGrid的单字段查询。就是只能通过一个字段作为查询条件的查询。虽然大多数情况下,系统功能需要的查询,都是多个字段组合查询的,jqGrid也提供组合多个字段的查询,但是组合多个字段的查询,其实基于的原理还是单字段的查询。所以这里主要介绍一下单字段的查询,以后有机会在来说明一下高级一点的多字段组合查询。

大家可以先看看图片,对单字段查询有一个直观的了解(图片来源于jqGrid的wiki)

\

 

这里需要注意的几点分别说明如下:

 

首先,其实默认jqGrid就有这个功能,所以,向上一篇文章中的例子一样,基本上不需要在js中添加其他的代码。

其次,哪些字段能作为单字段查询,哪些字段不能,这是在jqGrid的colModel属性中可以进行设置的。比如,如果我们对某一个列的数据设置如下:{name:'userName',index:'usrName', width:110,search=false} 那么这个userName列是不会在单字段查询中显示出来的。

第三,点击上面图中的"Find"按钮之后,jqGrid会额外的向服务器发送几个参数过去。想必你已经猜到了,这些参数就是图片中显示的:查询字段searchField,查询操作searchOper以及查询值searchString。这里之所以说是额外的参数,是相对于默认情况下的参数,比如前一篇文章中所说的page,sidx,sord,rows,_search,nd这些参数而言的。当然,这里_search参数的值是true。

第四,最烦处理的,就是如何把我们的searchOper的参数值,转换为对数据库记录的查询操作。

页面上显示的操作,主要包括'equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'。相应的,后台获取到的searchOper的值,对应的是'eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc'。

最最简单的想法就是像我这养,写一个方法来处理:(以下的例子是基于Hibernate写的)

view plain

1.    /**  

2.    * 根据参数获取查询HQL的语句(如果是日期字段可能会出问题)  

3.    * @param sField 字段名称     

4.    * @param sOper  操作名称     

5.    * @param sValue 值    

6.    * @return    

7.    */   

8.    public static String getOperation(String sField, String sOper,String sValue){ 

9.             

10.   if(sValue==null || sValue.trim().length() ==0) 

11.               return ""; 

12.           String result = ""; 

13.           if(sOper.trim().equals("eq"))       //等于            result = sField + "='" + sValue +"' "; 

14.           else if(sOper.trim().equals("ne"))  //不等于           result = sField + " != '"+ sValue+"' "; 

15.           else if(sOper.trim().equals("lt"))  //小于            result = sField + " < '"+ sValue+"' "; 

16.           else if(sOper.trim().equals("le"))  //小于等于          result = sField + " <= '"+ sValue+"' "; 

17.           else if(sOper.trim().equals("gt"))  //大于            result = sField + " > '"+ sValue+"' "; 

18.           else if(sOper.trim().equals("ge"))  //大于等于          result = sField + " >= '"+ sValue+"' "; 

19.           else if(sOper.trim().equals("bw"))  //以...开始            result = sField + " LIKE '"+ sValue+"%' "; 

20.           else if(sOper.trim().equals("bn"))  //不以...开始           result = sField + " NOT LIKE '"+ sValue+"%' "; 

21.           else if(sOper.trim().equals("in")){ //包括            String[] sv = sValue.split(","); 

22.               String svString = "";     

23.           for(int i = 0 ;i 

然后在dao类中,像如下这样进行查询和返回

view plain

1.    @SuppressWarnings("unchecked")   

2.    public PageModel findAll(int page, int rows, String sidx, String sord,String sField,String sValue,String sOper) { 

3.                Session s = null; 

4.            try     { 

5.                s = this.getSession(); 

6.                            //根据查询条件封装HQL语句 

7.                StringBuilder searchHQL  = new StringBuilder (""); 

8.                if(sField != null && sOper != null){ 

9.                    String cond = SearchOperationUtil.getOperation(sField, sOper, sValue); 

10.                   if(cond != null && cond.trim().length() != 0){ 

11.                       searchHQL.append(" WHERE brand."); 

12.                       searchHQL.append(cond); 

13.                   } 

14.           &nbs

补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,