最近使用flexigrid的时候遇到一个问题:在grid中选中一条记录后跳转到其他页面进行操作(比如说编辑数据),之后再回到grid页面时,希望能够回到操作之前所停留的页数,即要“记住当前分页”。
当前页数的保存可以通过session之类的手段实现,但问题的关键点在于如何手动设定flexigrid的起始页。一开始我根据网上广泛流传的那一份flexigrid参数说明,以为是设置page参数,但结果不起作用。经过查看flexigrid的源代码后才发现,要设置的不是page,而是newp,最后的实现实现方案如下(由于写的时候比较随意,就在jsp上直接写了java代码了,):
$("#flex1").flexigrid({ //...... newp: <% Object p = request.getSession().getAttribute("currentPage"); if(null != p){ out.print(p.toString()); }else{ out.print(1); } %>, //...... });
那么,为什么是newp,而不是page呢?通过查看flexigrid的源代码就很容易地发现原因:
populate: function () { //get latest data //...... var param = [ { name : 'page', value : p.newp } ,{ name : 'rp', value : p.rp } ,{ name : 'sortname', value : p.sortname} ,{ name : 'sortorder', value : p.sortorder } ,{ name : 'query', value : p.query} ,{ name : 'qtype', value : p.qtype} ]; if (p.params){ for (var pi = 0; pi < p.params.length; pi++) param[param.length] = p.params[pi]; } $.ajax({ type: p.method, url: p.url, data: param, dataType: p.dataType, success: function(data){g.addData(data);}, error: function(data) { try { if (p.onError) p.onError(data); } catch (e) {} } }); },
注意第6行,flexigrid在初始化时,默认是把newp参数赋值给ajax请求的参数page的,而grid的page参数,其实仅用于显示当前页码,并不作为请求参数传递到后台。