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! 

 

posted @ 2012-07-17 01:53  垚淼  阅读(4006)  评论(0编辑  收藏  举报