基于Struts2的分页复选框记忆选择
之前项目中一直没有用到分页checkBox需要记住兄弟页面选择的需求,分页一直都是页面的整体刷新,然后在后台根据传来的参数,重新从数据库读取数据展示到前台,只是简单的分页展示,功能简单。
而最近一个需求,要求不止是分页展示,还要记住兄弟页面的checkbox的选择情况,并最终将所有选择信息传到后台生成记录。
因为整个模块代码分布比较零散,不方便将代码粘贴上来。就简单记录下自己的思路吧。
1.首先,每个分页的选择记录需要有一个容器来存储,开始我是用页面传值来记录每一个选择id,后来发现添加id容易,但是取消之前选择过的id麻烦,最终选择用SESSION来存储一个HashSet集合,所有的id也都放在这个集合里,因为是set集合,所以即使重复添加,也没有重复的id值,去除id也很简单,总之,类似于这样的对数据的处理,放在后台处理肯定比在前端方便多了。
2.必须保证这个set集合里的数据是正确的,也是最新的。保持正确的话,就需要适时对set里的数据进行更新,及清空,防止里面有脏数据。目前我的做法,是在跳转到当前分页模块的时候,就对SESSION中的set集合进行一次清空,防止上一次操作遗留的set数据成为脏数据,同时,在完成一次记录的添加后,set集合中的数据也就不需要了,也要进行一次清空。需要注意的一点是,翻页的时候,不需要清空哦,呵呵呵,不然做啥都是枉然啦。至于数据的最新,因为是分页记忆选择,我选择在每次点击分页按钮的时候,也就是对后台发送分页请求的时候,在发送分页请求前,先执行一次ajax请求,将当前分页中checkbox已经选中的,和没有选中的id都传到后台,在后台先将已经选中的数据进行一次添加,再将没有选中的id进行一次移除,并且在最后请求返回的时候,获取session中set集合的个数,也就是选择id的最新个数,以便传到前台,通过js控制id的选择数量。当然,在最后完成选择,进行添加记录请求的时候,因为当前的操作不需要点击分页了,用户已经完成了最终选择,那么在提交添加记录请求前,同样的也要完成一次ajax请求,对当前分页的checkbox进行一次添加和移除,并且返回最终所有选择的id数量。如果数量符合需求的要求,则进行添加记录请求。
3.另外一点就是客户的体验,当你跳转到之前选择的页面时,要保证页面中你选择过的复选中是选中状态,这样才是正确的用户体验。我的做法是将session中的set集合遍历出来,将set中的id值放在隐藏的input标签中,然后将隐藏的input标签用jquery进行遍历,获取到当前标签的value值,也就是选中的id值,通过id值利用jquery选择器定位到对应的分页复选框,将当前复选框设为选中状态。
至此,大致的思路步骤就到此。
附上ajax请求到后台的struts2 Action的代码
/*
?