这个分页还是比较有个性的 ...
主要是靠struts2标签和后台分页类共同计算出分页信息 , 然后根据对目标action的不同配置,这个分页也能复用到不同的地方
一:分页信息的计算
前台负责计算过程:
这是"第一页"的链接 ,
如果真的是第一页 就就给后台action传两个相应的参数 ,如果判断出不是第一页, 那就只把汉字显示出来 ,上边并没有连接
<s:if test="page.hasPrevious==true">
<s:a action="%{pageAction}">
第一页
<s:param name="page.index" value="0"></s:param>
<s:param name="page.currPage" value="1"></s:param>
</s:a>
</s:if><s:else>
第一页
</s:else> </span> <span>
这是"上一页"的链接,
判断条件和上边首页的条件是一样的, 只是计算不一样而已
</span> <span> <s:if test="page.hasPrevious==true">
<s:a action="%{pageAction}">
上一页
<s:param name="page.index" value="page.previousIndex"></s:param>
<s:param name="page.currPage" value="page.currPage-1"></s:param>
</s:a>
</s:if><s:else>
上一页
</s:else> </span> <span>
相对的, "下一页"和"尾页"也是这样计算出来
二:后台计算总页数和当前页
总页数之前算法比较多了,就是不能整除的话 要再补一页显示剩下的
这个是计算当前页
这个用于调整索引从0开始,且当前页从1开始, 对索引传值的转换问题
试了几遍写的不赖 , 现在还不明白为什么索引和当前页的记录不是从同一的编号开始, 一会儿去好好看看搜索部分的实现 找找答案
public Integer getCurrPage() {
Integer c = index / pageSize;
if ((index + 1) % pageSize != 0) {
c++;
}
return c == 0 ? 1 : c;
}
三:提交到不同的action
所有计算的结果都会提交到分页的action,但这里用了OGNL去获得action的配置,
这样就灵活了, 用同一段代码 想往哪传往哪传
下边是两种用到分页的情况,可以根据action的不同配置,这个分页也能复用到不同的地方
第一种分页比较简单,就是显示分页
<!-- 为分页定制的url,支持传参数 -->
<s:url id="pageAction" includeContext="false"
action="articleAction_queryAllMyArticles" namespace="/">
</s:url>
第二种分页用到了搜索中
传递分页信息的同时 还把request中隐藏的搜索条件顺便也传递了出去
<s:url id="pageAction" includeContext="false"
action="articleAction_doSearch" namespace="/">
<s:param name="searchStr" value="searchStr"></s:param>
<s:param name="article.articleTypeName"
value="article.articleTypeName"></s:param>
</s:url>
<!-- 分页 -->
<s:include value="/WEB-INF/jsp/pageUtil.jsp"></s:include>