Jqgrid搜索结果与Spring 3.0分页

时间:2012-06-25 14:17:22

标签: spring spring-mvc jqgrid spring-roo

我有几个jqgrids正在运行,并且都运行良好。但是,当我进行搜索时,我每页只显示十个搜索结果。只要结果超过十个,单击第二页对网格没有影响。这是我的一个控制器动作,特别注意搜索是真的if satatement ....

修改

我想我可能已经找到了可能导致我的问题的线索。你看我在主网格下面有几个子网格。就我的java代码而言,我有 object-A ,其中包含 object-B 列表 因此 A 的子网格 B 。我构建json字符串以提供给网格的方式是迭代 A 中包含的 B 列表。我没有编写某种类型的查询来说明顺序,并限制结果等。

所以我想真正的问题应该是如何在集合上构建一个finder,以便可以按照我的意愿安排和排序内容?

以下是我在上面描述为 B 的某个实体的操作。特别注意我所说的 person.getContacts()

@RequestMapping(value = "contactjsondata/{pId}", method = RequestMethod.GET)
public @ResponseBody String contactjsondata(@PathVariable("pId") Long personId, Model uiModel, HttpServletRequest httpServletRequest) {
    Person person = Person.findPerson(personId);  
    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<Contact> contacts = new ArrayList<Contact>(person.getContacts());        
double tally = Math.ceil(contacts.size()/10.0d);
int totalPages = (int)tally;
int records = contacts.size();

    StringBuilder sb = new StringBuilder();
sb.append("{\"page\":\"").append(page).append("\", \"records\":\"").append(records).append("\", \"total\":\"").append(totalPages).append("\", \"rows\":[");
boolean first = true;
for (Contact c: contacts) {
    sb.append(first ? "" : ",");
    if (first) {
        first = false;
    }
    sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\"]}",c.getId(), c.getId(), c.getContactType().getName() ,c.getContactValue()));
}
sb.append("]}"); 
return sb.toString();
}

1 个答案:

答案 0 :(得分:1)

要解决分页问题,​​您需要替换以下代码块

for (Contact c: contacts) {
    sb.append(first ? "" : ",");
    if (first) {
        first = false;
    }
    sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\"]}",c.getId(), c.getId(), c.getContactType().getName() ,c.getContactValue()));
}  

使用:

for (int i=limitStart; i<Math.min(records, limitStart+limitAmount); i++){
    Contact c = contacts[i];
    sb.append(first ? "" : ",");
    if (first) {
       first = false;
    }
    sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\"]}",c.getId(), c.getId(), c.getContactType().getName() ,c.getContactValue()));
}

另一种选择是使用loadonce:true让jqGrid处理分页和排序。在这种情况下,您无需进行上述更改