分页的思路
首先,我是通过访问相同的action,然后用offiset传递当前点击的页码。如:front/bbs?offiset=1 (表示点击第一页)
action接收到offiset(点击的页码)后查询数据,数据库处理先不谈。
假设我们处理完得到了数据,接着跳转到原来的jsp页面,jsp页面的数据就更新了。
页码的算法
假设已经得到总页数page,当前点击的页码offiset。
由于url不能用运算符,我在action里用变量保存offiset1 = offiset - 1; offiset2 = offiset + 1;
以下代码用到struts标签,先导入标签库 <%@ taglib uri="/struts-tags" prefix="s"%>
上一页prev(当offiset不等于1的时候显示)
<s:if test="offiset != 1"> <a href="front/bbs?offiset=<s:property value="offiset1"/>">Prev</a> </s:if>
下一页Next (当 offiset不等于200的时候显示,有时页数没有200条,我就有最大页数page代替)
<s:if test="offiset != page"> <a href="front/bbs?offiset=<s:property value="offiset2"/>">Next</a> </s:if>
第一页、最后一页一直都会有,直接写上
<a href="front/bbs?offiset=1">1</a> <a href="front/bbs?offiset=<s:property value="page"/>"><s:property value="page" /></a>
中间的页码
用bean标签循环所有页码(first、last表示从1到page循环),相当于一个for循环。
<s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="1" /> <s:param name="last" value="page" /> <s:iterator status="st"> <a href="front/bbs?offiset=<s:property/>"><s:property /> </a> </s:iterator> </s:bean>
但是我们中间只要显示11个页码,这就要在first、last那里做判断了。
修改后如下:(这里我用三目运算符,考虑到当总页数小于12,运算比较纠结)
<s:param name="first" value="offiset > 7 ? offiset - 5 : 2" /> <s:param name="last" value="offiset<7 ? page>12 ? 12 : page : offiset + 5 < page ? offiset + 5 : page" />
加入当前页的页码变色
<s:iterator status="st"> <!-- 当前页码 --> <s:if test="#st.index+1 == offiset"> <a href="front/bbs?offiset=<s:property/>"><font color="#ff0000"><s:property /></font> </a> </s:if> <!-- 其他页码 --> <s:else> <a href="front/bbs?offiset=<s:property/>"><s:property /> </a> </s:else> </s:iterator>
最后加入省略号,基本代码如下:
<s:if test="offiset != 1"> <a href="front/bbs?offiset=<s:property value="offiset1"/>">Prev</a> </s:if> <a href="front/bbs?offiset=1">1</a> <s:if test="offiset > 7">...</s:if> <s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="offiset > 7 ? offiset - 5 : 2" /> <s:param name="last" value="offiset<7 ? page>12 ? 12 : page : offiset < page - 5 ? offiset + 5 : page" /> <s:iterator status="st"> <!-- 当前页码 --> <s:if test="#st.index+1 == offiset"> <a href="front/bbs?offiset=<s:property/>"><font color="#ff0000"><s:property /></font></a> </s:if> <!-- 其他页码 --> <s:else> <a href="front/bbs?offiset=<s:property/>"><s:property /> </a> </s:else> </s:iterator> </s:bean> <s:if test="offiset < page-7">...</s:if> <a href="front/bbs?offiset=<s:property value="page"/>"><s:property value="offiset2" /> </a> <s:if test="offiset != page"> <a href="front/bbs?offiset=<s:property value="offiset2"/>">Next</a> </s:if>
end!