EasyUI实例-字段排序(以及EasyUI框架的datagrid-bug)

可以看到我的实例-增删改查中并没有字段排序,现在我们尝试着增加一下:对学号字段排序
第一次尝试:
1、datagrid是用html标签初始化的:

2、在js中用onSortColumn事件来完成字段排序:



3、Service层(假设easyui会传递分页信息到后台):

4、DAO层SQL:


5、问题:
访问:前端页面没成功排序。断点测试过,点击排序会 发送两次SQL,一次就是进入排序的方法,第二次就是进入datagrid中的url中的查询所有方法。两个方法都加个断点。排序方法的断点过了后,查询断点不过,发现页面有了排序后的记录。当第二个断点也过了,页面又会重新加载然后覆盖排序后的记录。也发现,排序是全部记录的排序,不是当前页面记录的排序,因为DAO层没取当前页面记录再排序,而是查询全部数据排序(下面将做出修改)。
总结问题:
第一:不会发送分页信息到后台。
第二:后台输出SQL信息发现,会发送两次请求,第一次就是点击排序时发送的SQL,当成功返回数据到前台页面后,再发送一次请求,url就是table标签中的data-options中的url属性。
第三:没根据当前页面数据进行排序
先处理第二个问题:
第一:这是easyui的bug,百度网友说不要用html初始化datagrid,用js初始化(没用)

第二:网友说在加载返回成功的json数据那用window.setTimeout弄个延迟。是这样的情况:
例如:(table用html写好,只不带class="easyui-datagrid",交给js中初始化)
var $grid = $("#datagrid"); $.extend($grid.datagrid("options"),{ url : '........',//这里定义url queryParams : {}//根据实际情况定义参数 }); $grid.datagrid("load");//这行代码执行后发送了两次请求 gridHelper.isRefresh = false; }
一开始的初始化没定义URL属性,但是也会有“处理中,请稍后。。”,这样的加载效果持续一瞬间,但也肯定没发送请求的,估计源码中通过setTimeout来实现,问题就出在这里了。就是在setTimeout的过程中,下面的代码定义了url,setTimeout后发现url被定义了,所以也发送了一个请求,load这个也会发送两次请求。可以这样解决问题,数据加载加上延迟。
window.setTimeout(function(){ var $grid = $("#datagrid"); $.extend($grid.datagrid("options"),{ url : "",//这里定义url queryParams : {}//根据实际情况定义参数 }); $grid.datagrid("load"); gridHelper.isRefresh = false; },100);//延迟100毫秒执行,时间可以更短

我们下面进行最终解决问题:
1、datagrid完全用js来初始化:
在触发排序事件时获取当前页面数和每页记录数,并将异步提交加上延迟





2、Action层(这里就不分service层了,直接调用dao):


3、Dao层:
sql1:就是先查询出当前页面的数据,然后再用sql去排序
注意:页面初始化时调用的方法也要进行字段排序,sql1根据这同步
例如:第一条是页面初始化时候查询数据的sql,第二个就是sql1
select * from stu order by stuNum desc limit 0,10;
select * from(select * from stu order by stuNum desc limit 0,10) a order by a.stuNum asc


4、总结:
到这里,已经将问题解决完了,但是代码是非常的麻烦,因为当访问页面就得出现数据,所以datagrid本身得被赋予url属性,所以得写一个方法对应此url属性,当然,分页也是用的这个url属性。但是到了排序,那就不得不另外写一个方法去接受排序参数然后进行查询,这样子就要写两个方法了。现在我有另外一种想法,不给dagagrid的url属性赋值,点击查询按钮才去访问servlet展示数据,而且分页的,排序的都用到这个方法。

下面进行第二次尝试
1、首先来页面的demo看看:
可以看到,页面是没数据的,因为datagrid没定义url属性,下面看一下js怎么写的

2、datagrid完全用js初始化:
注意,查询按钮的查询事件和分页的和排序的都是一个方法。
首先是datagrid的初始化:

接下来跟着就是datagrid排序事件:

最后是分页器的查询:

下面是查询方法:

总结:记得datagrid初始化时不要定义url;字段排序时先判断页面是否存在数据了,没有就不进行排序查询并返回提示信息;要记得分页器也需要弄一个查询;最后记得查询方法是都接受分页信息和排序信息的。

3、Action层(这里就不分service层了,直接调用dao):

注意:记得判断分页信息和排序信息是否为空,不然DAO层的sql拼接会出错。

4、DAO层:

注意:排序和不排序执行的SQL不一样。还有特别要注意的是,排序的SQL要同步不排序的SQL,这样子能保证排序的就是当前页面的数据: sql1就是先查询出当前页面的数据,然后再用sql去排序。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值