欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

freemarker?jsp?java內(nèi)存方式實(shí)現(xiàn)分頁(yè)示例

 更新時(shí)間:2023年06月02日 14:16:11   作者:雨翔河  
這篇文章主要介紹了freemarker?jsp?java內(nèi)存方式實(shí)現(xiàn)分頁(yè)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

很多時(shí)候我們都會(huì)用到分頁(yè),模版渲染有的用的是 jsp,velocity,freemarker。。。

今天搞了下分頁(yè)的發(fā)現(xiàn)有點(diǎn)燒腦,哈。 首先后臺(tái)進(jìn)行分頁(yè)的時(shí)候會(huì)直接在 sql 里面實(shí)現(xiàn),這個(gè)都大同小異,這里來(lái)說(shuō)下在內(nèi)存中分頁(yè),先上代碼:

java 內(nèi)存分頁(yè)

通過(guò)傳入查詢出來(lái)的總的 list 數(shù)據(jù),頁(yè)碼頁(yè)數(shù)來(lái)得到當(dāng)頁(yè)的 list 數(shù)據(jù)。

/**
?*?內(nèi)存分頁(yè),從1開(kāi)始
?*?@param?list?list
?*?@param?pageIndex?頁(yè)碼
?*?@param?pageSize?頁(yè)數(shù)
?*?@param??T
?*?@return?T
?*/
public?static??List?pagination(List?list,?int?pageIndex,?int?pageSize){
????final?int?totalSize?=?list.size();
????pageIndex?=?pageIndex?<=?1???1?:?pageIndex;
????int?startIndex?=?Math.max((pageIndex?-?1)?*?pageSize,?0);
????startIndex?=?Math.min(startIndex,?totalSize);
????int?endIndex?=?startIndex?+?pageSize;
????endIndex?=?Math.min(endIndex,?totalSize);
????return?list.subList(startIndex,?endIndex);
}

#### 后臺(tái)得到數(shù)據(jù)之后需要由前端渲染得到分頁(yè) html 代碼,下面是分別使用 freemarker 和 jsp 的實(shí)現(xiàn).

使用 freemarker

可以定義分頁(yè)宏方便的解決這個(gè)問(wèn)題。

<#macro?page?pageUrl?totalCount?pageIndex?pageSize>
???<#--?頁(yè)碼為小于1的,惡意翻頁(yè)的情況直接退出?-->
???<#if?pageIndex<=0>
??????<#assign?pageIndex=1>
???</#if>
???<#--?數(shù)量大于總數(shù)量,惡意翻頁(yè)的情況直接退出?-->
???<#if?((pageIndex*pageSize-totalCount)>pageSize)>
??????<#return>
???</#if>
???<#--?只有一頁(yè)的數(shù)據(jù)就不顯示分頁(yè)了?-->
???<#if?(totalCount<=pageSize)>
??????<#return>
???</#if>
???<nav?class="nav-pagination">
??????<ul?class="pagination">
??????<#assign?pageCount=(totalCount/pageSize)?ceiling>
??????<#if?(pageIndex>1)>
?????????<li><a?href="${pageUrl+1}"?title="首頁(yè)"><<</a></li>
??????</#if>
??????<#if?(pageIndex>5)>
?????????<#assign?prevPages=pageIndex-9>
?????????<#if?prevPages?lt?1>
????????????<#assign?prevPages=1>
?????????</#if>
?????????<#assign?start=pageIndex-4>
?????????<li><a?href="${pageUrl+prevPages?c}"?title="向前5頁(yè)">...</a></li>
??????<#else>
?????????<#assign?start=1>
??????</#if>
??????<#--?顯示當(dāng)前頁(yè)附近的頁(yè)-->
??????<#assign?end=pageIndex+4>
??????<#if?(end>pageCount)>
?????????<#assign?end=pageCount>
??????</#if>
??????<#list?start..end?as?index>
?????????<#if?pageIndex==index>
????????????<li?class="active"><a?href="${pageUrl+index?c}"><b>${index?c}</b></a></li>
?????????<#elseif?index!=0>
????????????<li><a?href="${pageUrl+index?c}">${index?c}</a></li>
?????????</#if>
??????</#list>
??????<#--如果后面頁(yè)數(shù)過(guò)多,顯示"...":-->
??????<#if?(end?lt?pageCount)>
?????????<#assign?endend=end+4>
?????????<#if?(endend>pageCount)>
????????????<#assign?endend=pageCount>
?????????</#if>
?????????<li><a?href="${pageUrl+endend?c}"?title="向后5頁(yè)">...</a><li>
??????</#if>
??????<#--?顯示"下一頁(yè)":-->
??????<#if?(pageIndex?lt?pageCount)>
?????????<li><a?href="${pageUrl+pageCount?c}"?title="末頁(yè)">>></a></li>
??????</#if>
??????</nav>
</#macro>

使用 jsp

  • 這里我是直接在 java 代碼里實(shí)現(xiàn)的分頁(yè)插件。
/**
     * 分頁(yè)工具
     * @param pageUrl
     * @param pageIndex
     * @param pageSize
     * @param totalCount
     * @return string
     */
    public static String page(String pageUrl,int pageIndex,int pageSize,long totalCount){
        StringBuilder stringBuilder = new StringBuilder("");
        if( pageIndex<=0 ){
            pageIndex=1;
        }
        if( (pageIndex*pageSize-totalCount) >pageSize ){
            return stringBuilder.toString();  // 惡意翻頁(yè)
        }
        if( totalCount<=pageSize ){
            return stringBuilder.toString();  //只有一頁(yè)就不顯示了
        }
        stringBuilder.append("<div class='pagination'><ul>");
        int pageCount = (int) (totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1);
        int start;
        if(pageIndex>1) {
            stringBuilder.append("<li><a href='").append(pageUrl).append("1' title='首頁(yè)'><<</a></li>");
        }
        if( pageIndex>5 ){
            int prevPages = pageIndex-9;
            if( prevPages<1 ){
                prevPages=1;
            }
            start = pageIndex-4;
            stringBuilder.append("<li><a href='").append(pageUrl).append(prevPages).append("' title='向前5頁(yè)'>...</a></li>");
        }else{
            start=1;
        }
        int end = pageIndex+4;
        if( end>pageCount ) end=pageCount;
        for(int index=start;index<=end;index++){
            if( pageIndex==index ){
                stringBuilder.append("<li class='active'><a href='")
                        .append(pageUrl).append(index)
                        .append("'><b>").append(index)
                        .append("</b></a></li>");
            }else if(index!=0){
                stringBuilder.append("<li><a href='").append(pageUrl).append(index).append("'>").append(index).append("</a></li>");
            }
        }
        if( end<pageCount ){
            int endFive = end+4;
            if( end>pageCount ){
                endFive=pageCount;
            }
            stringBuilder.append("<li><a href='").append(pageUrl).append(endFive).append("' title='向后5頁(yè)'>...</a><li>");
        }
        if( pageIndex<pageCount ){
            stringBuilder.append("<li><a href='").append(pageUrl).append(pageCount).append("' title='末頁(yè)'>>></a></li>");
        }
        stringBuilder.append("</ul></div>");
        return stringBuilder.toString();
    }

像這樣就可以了,至于傳入的 url 是什么鬼,比如 "index.jsp?p=" 或者 "index.jsp?type=XXX&t=XXX&p="

這里我自己定義的頁(yè)碼參數(shù)是 p,看自己心情嘍。

總之不管你使用何種方法,這幾個(gè)參數(shù)是需要的:傳入的需要拼接的 url,頁(yè)碼 pageIndex,一頁(yè)顯示多少數(shù)據(jù) pageSize,  總共多少 totalCount.

以上就是freemarker jsp java內(nèi)存方式實(shí)現(xiàn)分頁(yè)示例的詳細(xì)內(nèi)容,更多關(guān)于freemarker jsp java內(nèi)存分頁(yè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IDEA中GitLab的使用詳解

    IDEA中GitLab的使用詳解

    這篇文章主要介紹了IDEA中GitLab的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • spring中@autowired、@Qualifier、@Primary注解的使用說(shuō)明

    spring中@autowired、@Qualifier、@Primary注解的使用說(shuō)明

    這篇文章主要介紹了spring中@autowired、@Qualifier、@Primary注解的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java接口和抽象類用法實(shí)例總結(jié)

    Java接口和抽象類用法實(shí)例總結(jié)

    這篇文章主要介紹了Java接口和抽象類用法,結(jié)合實(shí)例形式總結(jié)分析了Java接口與抽象類的具體定義、使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2015-12-12
  • MapTask階段shuffle源碼分析

    MapTask階段shuffle源碼分析

    今天小編就為大家分享一篇關(guān)于MapTask階段shuffle源碼分析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 解讀動(dòng)態(tài)數(shù)據(jù)源dynamic-datasource-spring-boot-starter使用問(wèn)題

    解讀動(dòng)態(tài)數(shù)據(jù)源dynamic-datasource-spring-boot-starter使用問(wèn)題

    這篇文章主要介紹了解讀動(dòng)態(tài)數(shù)據(jù)源dynamic-datasource-spring-boot-starter使用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • JavaWeb項(xiàng)目中springmvc和tomcat對(duì)靜態(tài)文件的處理

    JavaWeb項(xiàng)目中springmvc和tomcat對(duì)靜態(tài)文件的處理

    這篇文章主要介紹了JavaWeb項(xiàng)目中springmvc和tomcat對(duì)靜態(tài)文件的處理 的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Java 實(shí)現(xiàn)LZ78壓縮算法的示例代碼

    Java 實(shí)現(xiàn)LZ78壓縮算法的示例代碼

    這篇文章主要介紹了Java 實(shí)現(xiàn)LZ78壓縮算法的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Java設(shè)計(jì)模式之里氏替換原則精解

    Java設(shè)計(jì)模式之里氏替換原則精解

    設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_(kāi)發(fā)人員所采用。設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。本篇介紹設(shè)計(jì)模式七大原則之一的里氏替換原則
    2022-02-02
  • java根據(jù)負(fù)載自動(dòng)抓取jstack?dump詳情

    java根據(jù)負(fù)載自動(dòng)抓取jstack?dump詳情

    這篇文章主要介紹了java根據(jù)負(fù)載自動(dòng)抓取jstack?dump詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Java后端WebSocket的Tomcat實(shí)現(xiàn)

    Java后端WebSocket的Tomcat實(shí)現(xiàn)

    這篇文章主要介紹了Java后端WebSocket的Tomcat實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論