最近在研究ExtJS,遇到了一个棘手的问题,就是GridPanel的分页问题,相信这个问题也是让很多初学者头疼的问题之一吧!对于这个问题,我在网上搜索了好久,看了好多帖子基本上都是写的前端extjs代码,而没有后台代码,我有点怀疑发帖的这些人是不是真的会这项技术,如果真的会的话他们应该知道只是贴一个前端代码出来又有什么用???前端代码随处可得,而真正缺少的是后台代码的实现,可惜的是搜索了半天也没有找到一个帖子能够有效地解决问题!浪费了不少时间,最后还是以自己的办法解决了这个苦恼已久的问题,所以发帖出来给需要的人,免得跟我一样再走很多弯路。好了,废话不说,以下是java后台代码的实现。
private List allList=null;
public ActionForward getAllUser(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response
){
setEncodingUtf8(response);
try {
int start=Integer.parseInt(request.getParameter("start"));
int limit=Integer.parseInt(request.getParameter("limit"));
JSONObject json = new JSONObject();
if(this.allList==null){
this.allList=userBO.getAllUser(); //调用逻辑层获取数据
}
int total=allList.size();
List pageList=getPagingData(start, limit, allList);
json.put("total", total);
json.put("success", true);
JSONArray arr = JSONArray.fromObject(pageList);
json.put("root", arr);
response.getWriter().print(json);
return null;
} catch (Exception e) {
return mapping.findForward("error");
}
return null;
}
//我的解决方法是既不用内存代理也不用分页时每次查询数据库,只需要第一次查询时取出数据库中的全部数据
//以后分页显示时只是在内存中取数据,这样第一次查询时速度可能慢,以后分页查询很快
//个人认为这种方法方便简单
public List getPagingData(int start,int limit,List list){
List tempList=new ArrayList();
for(int i=start;i<start+limit;i++){
tempList.add(list.get(i));
}
return tempList;
}
由于extjs前端分页代码网上很多,这里就不列出来了,以上就是我的解决方法,有什么不理解的欢迎留言,有更好的建议欢迎指教。