Настройки контроллера Jqgrid для поиска - PullRequest
1 голос
/ 26 марта 2012

Я прочесывал вики для jqgrid, и я не могу понять, как изменить логику в моем контроллере для jqgrid для поиска.

Я предполагаю, что при поиске будет использоваться то же самоеURL, указанный в jqgrid.Вот логика действий, вызываемая моей 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.В массиве записей присутствуют _search: true и filters: {"groupOp":"AND","rules":[{"field":"firstName","op":"eq","data":"Anil"}]}.SearchField, searchOper и searchString - все пустые, но присутствуют в массиве epost.

Что мне нужно сделать, чтобы поиск работал?

Нужно ли анализировать json в Java, используяпарсер json и массив filters, а затем измените мой запрос, добавив предложение where и используя значения из объекта Json?

Запрашивает ли jqgrid свой собственный объект данных, возвращаемый на сервер, и запускаетновый запрос?

Я не слишком уверен, что мне нужно делать, пожалуйста, предложите некоторую форму руководства.

1 Ответ

1 голос
/ 26 марта 2012

Сам я не пользуюсь Spring, но пост мне кажется содержит информацию, которая вам нужна.

Как правило, если вы используете диалоговое окно расширенного поиска (multipleSearch: true) или поиск по панели инструментов с помощью stringResult: true, jqGrid отправляет на сервер дополнительный параметр filters, формат которого описан здесь , Один параметр filters может содержать информацию о нескольких фильтрах. Таким образом, вы должны преобразовать строку JSON в объект и проанализировать объект, чтобы создать некоторую часть WHERE-части оператора SELECT. Точная реализация зависит от технологии, которую вы используете для оценки базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...