在实习的时候,用easyUI 框架完成了毕业设计的后台开发,其中用到的最主要的一个功能就是分页显示。当时看着姜师傅之前写的代码,我也仿照这他的写完了,但是到底为什么这样写一点也不知道,现在想想那是虎真是不求甚解,怪不得姜师傅总说我“还不知道它是什么呢,就写!;你要动脑啊!...” 等等一系列的提醒,现在想想人家真是没说错,当时的我就是不求甚解。现在正是参加工作了,现在的项目有个功能用到分页处理,再次静下心来看他们的代码,发现也不是很难看懂,不管怎样,这也算是一种成长吧。
(1) EasyUI项目的分页:
首先定义Page类,用于前端modle(模型)展现页面的页面总数,行数,
public DisplaytagPage<Position> queryPositionInfo(DisplaytagPage dp,Integer p_id,Integer pages,Integer rows){
Map<String,Integer>map=new HashMap<String,Integer>();
if(p_id!=null && p_id!=0){
map.put("p_id",p_id);
}
if(rows!=null &&rows!=0){
map.put("rows",rows);
}
if(pages!=null&&pages!=0){
map.put("pages",(pages-1)*20);
}else {
map.put("beginrows",0);
map.put("endrows",15);
}
List<Position> list=templateDao.queryPositionShow(map);//传给dao层需要展示页面每页的行数(首次展示的页面)
Integer count=templateDao.queryPositionShowCount(map);//查询所有的数据个数
dp.setList(list);
dp.setFullListSize(list.size());
dp.setTotalPages(count);
return dp;
}
在查询数据时:
<span style="white-space:pre"> </span><!--获得页面的每次请求所展现的数据-->
<span style="white-space:pre"> </span><select id="query_position_Displaytag" resultClass="position" parameterClass="java.util.Map">
SELECT * from k_position p
where 1=1
<isNotEmpty prepend="AND" property="p_id">
p.p_id=#p_id#
</isNotEmpty>
LIMIT #pages#, #rows#
</select>
<span style="white-space:pre"> </span><!--获得数据的总数-->
<select id="query_position_Displaytag_count" resultClass="java.lang.Integer" parameterClass="java.util.Map">
SELECT count(p_id) from k_position p
where 1=1
<isNotEmpty prepend="AND" property="p_id">
p.p_id=#p_id#
</isNotEmpty>
</select>
以上是分页处理的后台获取数据方式,在前台只要传(
Integer rows,Integer page)
$("#tt").datagrid({
method:'POST',
iconCls:'icon-save',
nowrap: true,
striped: true,
border: true,
url: "${pageContext.request.contextPath}/admin/queryAllPositionInfo",
rownumbers: true,
pagination: true,
singleSelect: true,
pageList:[5,10,15,20,25],
pageSize: 20,
queryParams: para,
height:500,
pageNumber: 1,
columns:[[
{field:"p_name", title:"职位名称 ",align:"center", width:getWidth("tt", 0.07)},
{field:"doConfirm", title:"操作", align:"center", width:getWidth("tt", 0.10),
formatter:function(val, data, ind) {
var htmls= '<a href="javascript:showChangePositionPage(' + data.p_id + ');">修改</a> <a href="javascript:delPositionItem(' + data.p_id + ');">删除</a>';
return htmls;
}}
]]
});
(2)现在项目的分页处理:
<1>同样定义页面展示模板 Page:
<span style="white-space:pre"> </span>private int pageTotal; //总页数
private int pageSize; //每页多少数据
private int pageNo; //当前页
private int dataTotal; //总数据条数
<2>前台换给后台:要展示的数据,及请求的页数 (Data data,Page page)
<3>service层处理,怎样显示:
判断传入参数若page为空,则显示初始页面(需要设置初始的起始页)ibatis 中的<![CDATA[ and c1.time <= #{userLog.time_end} ]]> 防止不兼容符号,错误识别。
order by c1.time desc limit #{page.pageSize} offset #{page.pageSize}*(#{page.pageNo}-1)
limit使用规范(以后要学)
<4>Dao层的Map.xml中,order by c1.time desc limit #{page.pageSize} offset #{page.pageSize}*(#{page.pageNo}-1)