【问题标题】:Jqgrid controller adjustments for search用于搜索的 Jqgrid 控制器调整
【发布时间】:2012-04-10 01:48:42
【问题描述】:

我一直在梳理 jqgrid 的 wiki,但我似乎无法弄清楚如何更改控制器中的逻辑以供 jqgrid 搜索。

我假设搜索将使用 jqgrid 中指定的相同 URL。这是我的 jqgrid 调用的动作逻辑。我正在使用 spring 3.0 及其 java 控制器。

@RequestMapping(value = "studentjsondata", method = RequestMethod.GET)
public @ResponseBody String studentjsondata(HttpServletRequest httpServletRequest) {
    Format formatter = new SimpleDateFormat("MMMM dd, yyyy");
    String column = "id";
    if(httpServletRequest.getParameter("sidx") != null){
        column = httpServletRequest.getParameter("sidx");
    }
    String orderType = "DESC";
    if(httpServletRequest.getParameter("sord") != null){
        orderType = httpServletRequest.getParameter("sord").toUpperCase();
    }
    int page = 1;
    if(Integer.parseInt(httpServletRequest.getParameter("page")) >= 1){
        page = Integer.parseInt(httpServletRequest.getParameter("page"));
    }
    int limitAmount = 10;
    int limitStart = limitAmount*page - limitAmount;
    List<Person> students = Person.findStudentPeopleOrderByColumn(true, column, orderType, limitStart, limitAmount).getResultList();

    long countStudents = Student.countStudents();

    double tally = Math.ceil(countStudents/10.0d);
    int totalPages = (int)tally;
    long records = countStudents;


    StringBuilder sb = new StringBuilder();
    sb.append("{\"page\":\"").append(page).append("\", \"records\":\"").append(records).append("\", \"total\":\"").append(totalPages).append("\", \"rows\":[");
    boolean first = true;
    for (Person s: students) {
        sb.append(first ? "" : ",");
        if (first) {
            first = false;
        }
        sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\"]}",s.getId(), s.getId(), s.getFirstName(), s.getLastName(),  formatter.format(s.getDateOfBirth().getTime()), s.getGender(), s.getMaritalStatus()));
    }
    sb.append("]}");
    return sb.toString();
}

这是我的 navGrid 声明

    $("#studentGrid").jqGrid('navGrid', "#pager", {edit:false,add:false,del:false,search:true},{ },{ },{ },
            { 
                sopt:['eq', 'ne', 'lt', 'gt', 'cn', 'bw', 'ew'],
                closeOnEscape: true, 
                multipleSearch: true, 
                closeAfterSearch: true 
            }
     );

这是我的 colModel 和 colNames

            colNames:['id','First Name', 'Last Name', 'Date Of Birth', 'Gender', 'Marital Status'], 
            colModel:[ 
                {name:'id',index:'id', width:15}, 
                {name:'firstName',index:'firstName', width:30, formoptions:{elmprefix:'(*) '}, editable:true, edittype: 'text', editrules:{required:true}},
                {name:'lastName',index:'lastName', width:30, formoptions:{elmprefix:'(*) '}, editable:true, edittype: 'text',editrules:{required:true}},
                {name:'dateOfBirth',index:'dateOfBirth', width:30, formoptions:{elmprefix:'(*) '},editrules:{required:true}, editable:true, edittype: 'text',               
                    editoptions: {
                        dataInit: function(element) {
                            $(element).datepicker({dateFormat: 'MM dd, yy'})
                        }
                    } 
                },                    
                {name:'gender',index:'gender', width:30, formoptions:{elmprefix:'(*) '}, editable:true, editrules:{required:true}, edittype: 'select',
                    editoptions:{value:{}}
                },
                {name:'maritalStatus',index:'maritalStatus', width:30, formoptions:{elmprefix:'(*) '}, editable:true, editrules:{required:true}, edittype: 'select',
                    editoptions:{value:{}}
                }                    
            ]

默认情况下,搜索使用 searchGrid 方法。在 post 数组中存在 _search: truefilters: {"groupOp":"AND","rules":[{"field":"firstName","op":"eq","data":"Anil"}]}。 searchField、searchOper 和 searchString 都是空的,但存在于 epost 数组中。

我必须做什么才能使搜索正常工作?

我是否必须使用 json 解析器和过滤器数组将 json 解析为 Java,然后通过添加 where 子句来更改我的查询并使用 Json 对象中的值?

jqgrid 是否查询它自己的数据对象以返回服务器并启动新查询?

我不太确定我必须做什么,请提供某种形式的指导。

【问题讨论】:

  • 我在你的代码中没有看到像 httpServletRequest.getParameter("filters")httpServletRequest.getParameter("_search") 这样的东西。
  • 我还没有进行更改,因为我不确定如何处理这些值。我是否将它作为 arg 传递给我的 finder 并将其从 json 解析为 java ?我不确定启用搜索功能的操作通常使用什么模式。正如您在上面概述的那样,可以访问这些值。
  • 我已经看到这个页面blog.brzezinka.eu/webmaster-tips/jquery/… 是在 php 中完成的,我是在 java 中完成的吗?这是通常的做法吗?
  • the post 中,我描述了如何在 ASP.NET 中将filters 与实体框架一起使用,但我不确定它是否真的对您有所帮助。我认为he post(见ma回答)可以帮助你更多。

标签: java jquery spring datagrid jqgrid


【解决方案1】:

我自己不使用 Spring,但在我看来 the post 包含您需要的信息。

一般来说,如果您使用Advance Searching 对话框(multipleSearch: true)或工具栏搜索和stringResult: true,jqGrid 会向服务器发送附加参数filters,其格式描述为here。一个参数filters 可以包含有关多个过滤器的信息。因此,您必须将 JSON 字符串转换为对象并分析该对象以构造 SELECT 语句的 WHERE 部分。确切的实现取决于您用于评估数据库的技术。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2011-08-14
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多