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的时候才可以。
Global site tag (gtag.js) - Google Analytics