分頁的思路
首先,我是通過訪問相同的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!