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

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開始
?*?@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)文章

最新評(píng)論

郯城县| 壶关县| 呼图壁县| 河北区| 肇源县| 东港市| 潞城市| 清徐县| 伊宁县| 洛隆县| 漾濞| 玉龙| 芒康县| 郯城县| 镶黄旗| 永寿县| 南雄市| 宝清县| 子洲县| 阿克| 察隅县| 阳朔县| 天峨县| 依安县| 克拉玛依市| 南丰县| 鄂伦春自治旗| 文水县| 呈贡县| 闻喜县| 西林县| 墨江| 青浦区| 象州县| 玉门市| 铜陵市| 古丈县| 屏边| 池州市| 汉川市| 高阳县|