最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

很多時候我們都會用到分頁,模版渲染有的用的是 jsp,velocity,freemarker。。。

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

java 內(nèi)存分頁

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

/**
?*?內(nèi)存分頁,從1開始
?*?@param?list?list
?*?@param?pageIndex?頁碼
?*?@param?pageSize?頁數(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);
}

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

使用 freemarker

可以定義分頁宏方便的解決這個問題。

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

使用 jsp

  • 這里我是直接在 java 代碼里實現(xiàn)的分頁插件。
/**
     * 分頁工具
     * @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();  // 惡意翻頁
        }
        if( totalCount<=pageSize ){
            return stringBuilder.toString();  //只有一頁就不顯示了
        }
        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='首頁'><<</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頁'>...</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頁'>...</a><li>");
        }
        if( pageIndex<pageCount ){
            stringBuilder.append("<li><a href='").append(pageUrl).append(pageCount).append("' title='末頁'>>></a></li>");
        }
        stringBuilder.append("</ul></div>");
        return stringBuilder.toString();
    }

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

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

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

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

相關(guān)文章

  • IDEA編譯報錯“java: 常量字符串過長”的原因及解決方法

    IDEA編譯報錯“java: 常量字符串過長”的原因及解決方法

    今天在開發(fā)過程中,由于嘗試將一個文件的 Base64 字符串設(shè)置為常量,結(jié)果導(dǎo)致 IDEA 編譯的時候出現(xiàn)了如下報錯java: 常量字符串過長,所以本文給大家記錄了IDEA編譯報錯“java: 常量字符串過長”的原因及解決方法,需要的朋友可以參考下
    2025-02-02
  • Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn)

    Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn)

    這篇文章主要介紹了Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java實現(xiàn)八個常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序等

    Java實現(xiàn)八個常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序等

    這篇文章主要介紹了Java如何實現(xiàn)八個常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序 、快速排序、歸并排序、堆排序和LST基數(shù)排序,需要的朋友可以參考下
    2015-07-07
  • 淺談java對象之間相互轉(zhuǎn)化的多種方式

    淺談java對象之間相互轉(zhuǎn)化的多種方式

    這篇文章主要介紹了淺談java對象之間相互轉(zhuǎn)化的多種方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java值傳遞之swap()方法不能交換的解決

    Java值傳遞之swap()方法不能交換的解決

    這篇文章主要介紹了Java值傳遞之swap()方法不能交換的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java Servlet簡單實例分享(文件上傳下載demo)

    Java Servlet簡單實例分享(文件上傳下載demo)

    下面小編就為大家?guī)硪黄狫ava Servlet簡單實例分享(文件上傳下載demo)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot和MyBatis環(huán)境下實現(xiàn)動態(tài)數(shù)據(jù)源切換過程

    SpringBoot和MyBatis環(huán)境下實現(xiàn)動態(tài)數(shù)據(jù)源切換過程

    dynamic-datasource-spring-boot-starter?是一個用于在SpringBoot和MyBatis環(huán)境下實現(xiàn)動態(tài)數(shù)據(jù)源切換的工具,它簡化了配置和切換邏輯,通過引入依賴,配置數(shù)據(jù)源和使用@DS注解,可以輕松實現(xiàn)數(shù)據(jù)源的動態(tài)切換
    2025-10-10
  • java中的Filter使用示例詳解

    java中的Filter使用示例詳解

    Filter是JavaWeb開發(fā)中實現(xiàn)全局邏輯控制的核心工具,通過靈活配置攔截路徑和類型,可高效完成編碼轉(zhuǎn)換、權(quán)限校驗、日志記錄等通用功能,這篇文章主要介紹了java中的Filter使用詳解,需要的朋友可以參考下
    2025-05-05
  • Java中的關(guān)鍵字volatile詳解

    Java中的關(guān)鍵字volatile詳解

    這篇文章主要介紹了Java中的關(guān)鍵字volatile,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 在Spring Boot中淺嘗內(nèi)存泄漏的實戰(zhàn)記錄

    在Spring Boot中淺嘗內(nèi)存泄漏的實戰(zhàn)記錄

    本文給大家分享在Spring Boot中淺嘗內(nèi)存泄漏的實戰(zhàn)記錄,結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04

最新評論

高平市| 道真| 本溪| 卢氏县| 通城县| 浦北县| 黑龙江省| 东源县| 台东县| 三门县| 二连浩特市| 同江市| 韶关市| 凭祥市| 勃利县| 泸西县| 五峰| 建始县| 长寿区| 宁波市| 子长县| 宜黄县| 志丹县| 齐齐哈尔市| 阿克苏市| 乐都县| 舞钢市| 朝阳区| 微山县| 灵寿县| 南开区| 墨玉县| 溧阳市| 宜阳县| 天门市| 调兵山市| 伊金霍洛旗| 赤峰市| 合作市| 湘阴县| 千阳县|