• 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! 

  • 相关阅读:
    【题解】[HEOI2016/TJOI2016]字符串
    【题解】CF1037H Security
    Centos 7开机自启动oracle
    WRH$_ACTIVE_SESSION_HISTORY打补丁14084247实现自动分区
    oracle设置awr采集间隔和保留时间
    dgbroker配置Fast-Start Failover
    dgbroker删除后切换为手工管理
    删除dgbroker
    现有dgbroker管理的dg下添加一台从库且互相切换
    linux-unzip-error
  • 原文地址:https://www.cnblogs.com/ljmin/p/2594529.html
Copyright © 2020-2023  润新知