easyui datagrid和grails整合,出现在服务器端的一点小问题
liuziyuan
2012-04-27
grails版本2.02 easyui版本1.2.6 场景描述:当在包含easyui datagrid的页面使用了pagination="true"之后,每次F5页面(localhost:8080/demo/book/list),在BookController的list()方法中,载入了两次params,第一次是2个参数的,第二次是4个参数的。 list.gsp <!doctype html> <html> <head> <meta name="layout" content="easyuimain"> <g:javascript src="book/list.js"></g:javascript> </head> <body> <table id="tt" class="easyui-datagrid" pagination="true" toolbar="#toolbar" url="list"></table> <div id="toolbar"> <a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" title="新建" onclick="add()"></a> <a href="#" class="easyui-linkbutton" iconCls="icon-edit" plain="true" title="修改" onclick="edit()"></a> <a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true" title="删除" onclick="remove()"></a> </div> </body> </html>
list.js $(function(){ //grid(); $('#tt').datagrid({ title:'Book List', rownumbers:'true',//行号 columns:[[ {field:'id',title:'sid',width:100}, {field:'title',title:'title',width:100}, {field:'price',title:'Price',width:100,align:'right'} ]] }); });
BookController.groovy def list() { def s = params.size() println "this is list action and params size is $s and params string is $params" } groovy console | Compiling 2 source files..... | Compiling 2 source files. this is list action and params size is 2 and params string is [action:list, controller:book] this is list action and params size is 4 and params string is [page:1, rows:10, action:list, controller:book]
大家可以看到,是运行了一次,但是打印了两条。 从初步分析,应该是在服务器端页面渲染后载入的时候,grails框架载入了默认的params.然后前台再载入js,ajax可能重新将页面包含分页的参数发给了服务器。 我暂时没有看datagrid.js的代码,想了一个解决方案,如下图 if(params.size() > 2){ def page = Integer.valueOf(params.page) ?: 1 // get the requested page def rows = Integer.valueOf(params.rows) ?: 10// get how many rows we want to have into the grid println "list params is 4 , and page is $page , and rows is $rows" } 这样暂时解决了,过滤掉了两个参数的那个params
|
|
kidli
2012-04-27
如果只是要绕过去,在指向list的链接加上那两个需要的参数应该也能规避吧;)
|
|
liuziyuan
2012-05-03
kidli 写道 如果只是要绕过去,在指向list的链接加上那两个需要的参数应该也能规避吧;)
在恢复视图之前就加上那两个参数,实际上在恢复视图阶段,服务器的确会传出来4个params,但是自己加上的却并不是从js设置中读出来的所需要的值,也仅仅是自己设置的默认值,而真正所需要的,依旧要等到第二次获取到4个params的时候才可以。 |