struts標簽實現博客園的分頁


分頁的思路

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM