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

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

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

引言

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

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

java 內(nèi)存分頁

通過傳入查詢出來的總的 list 數(shù)據(jù),頁碼頁數(shù)來得到當頁的 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>
??????<#--?顯示當前頁附近的頁-->
??????<#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)分頁示例的詳細內(nèi)容,更多關(guān)于freemarker jsp java內(nèi)存分頁的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IDEA中GitLab的使用詳解

    IDEA中GitLab的使用詳解

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

    spring中@autowired、@Qualifier、@Primary注解的使用說明

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

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

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

    MapTask階段shuffle源碼分析

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論