jfinal和freemaker的分页

本文介绍了一个基于Freemarker的自定义分页插件实现方式,该插件可以方便地集成到Web应用中,支持不同样式的分页导航,并详细展示了如何在控制器(Controller)和模型(Model)层进行配合以实现文章列表的分页展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<#-- 分页控件-->
<#-- 分页组件的使用 -->
<#--
pageShow 总页数, 当前页, 请求服务地址, 页面大小默认15, 显示最多分页个数, 请求服务地址参数默认为p, 分页样式(可选:gray(默认)、orange、blue)
<#import "pub/pageShow.ftl" as page>
<@page.pageShow pageCount, curPage, "pagePluginTest.do", pageSize, "blue"/>
-->
 
<#macro pageShow _totalPageNum _currentPageNo _pageName _pageSize=5 _styleClassName="gray" _maxShowNums=10 _defaultPageParameter="pn" >
    <#-- 本段默认起始页 -->
    <#local _pageStartNo = 1/>
    <#-- 本段默认结束页 -->
    <#local _pageEndNo = _maxShowNums />
    <#-- 分页的第一页 -->
    <#local _firstPageNo = 1 />
    <#-- 分页的最后一页 -->
    <#local _lastPageNo = _totalPageNum>
    <#-- 前一页号码 -->
    <#local _prePageNo = _currentPageNo-1 />
    <#-- 后一页号码 -->
    <#local _nextPageNo = _currentPageNo+1 />
     
    <#if _currentPageNo == _pageStartNo>
        <#local _prePageNo = _pageStartNo />
    </#if>
     
    <#if _currentPageNo == _lastPageNo>
        <#local _nextPageNo = _lastPageNo />
    </#if>
     
    <#if _currentPageNo gt _maxShowNums>
        <#local _thisPageSegment = ((_currentPageNo-1) / _maxShowNums)?int + 1/>
        <#assign _thisPageStartNo = _pageStartNo + (_thisPageSegment-1) * _maxShowNums/>
        <#assign _thisPageEndNo = _pageEndNo + (_thisPageSegment-1) * _maxShowNums/>
        <#if _thisPageEndNo gt _totalPageNum>
            <#assign _thisPageEndNo = _totalPageNum>
        </#if>
    <#else>
        <#assign _thisPageStartNo = _pageStartNo />
        <#assign _thisPageEndNo = _pageEndNo />
    </#if>
     
    <#-- 构造当前分页栏上面的分页按钮 -->
    <#local _pages=[] />
    <#if _totalPageNum != 0>
        <#list _thisPageStartNo .. _thisPageEndNo as _index>
            <#if _currentPageNo == _index >
                <#local _pages = _pages + [{"pageNum" : _index ,"url" : _pageName+"&"+_defaultPageParameter+"="+_index , "current" : true}] />
            <#else>
                <#local _pages = _pages + [{"pageNum" : _index ,"url" : _pageName+"&"+_defaultPageParameter+"="+_index , "current" : false}] />
            </#if>    
        </#list>
    </#if>
     
    <#-- 构造分页栏HTML代码 -->
    <#local _htmlNoLinkLine>
        <a href = "${_pageName}&${_defaultPageParameter}=${_firstPageNo}" target = "_self">首页</a>
        <#if _currentPageNo != _pageStartNo>
            <a href = "${_pageName}&${_defaultPageParameter}=${_prePageNo}" target = "_self">上一页</a>
        </#if>
         
        <#list _pages as page>
            <#if page.current?default(false)>
                <span class="current" >${page.pageNum}</span>
            <#else>
                <a href="${page.url}" mce_href="${page.url}" target="_self">${page.pageNum}</a>
            </#if>
        </#list>
         
        <#if _currentPageNo != _lastPageNo>
            <a href = "${_pageName}&${_defaultPageParameter}=${_nextPageNo}" target = "_self">下一页</a>
        </#if>
        <a href = "${_pageName}&${_defaultPageParameter}=${_lastPageNo}" target = "_self">末页</a>
        <span>共${_totalPageNum?default(0)}页</span>
    </#local>
     
    <!-- 将分页HTML代码放置到页面 -->
    <div class="${_styleClassName}">
        ${_htmlNoLinkLine}
    </div>
     
    <!-- 分页插件CSS -->
    <style type="text/css" mce_bogus="1">
        <#if _styleClassName == "gray">
        <#-- CSS gray style pagination -->
        div.gray {
            font-size: 12px;
            font-family: verdana, arial, helvetica, sans-serif;
            padding: 3px; 
            margin: 3px; 
            text-align: center;
            color:#999999;
        }
        div.gray a {
            border: #E1E2E3 1px solid; 
            padding: 7px 14px; 
            margin: 2px; 
            color: #0000CC; 
            text-decoration: none;
        }
        div.gray a:hover {
            border: #3388FF 1px solid; 
            background: #F2F8FF;
        }
        div.gray a:active {
            color: #FF0000; 
        }
        div.gray span.current {
            border: transparent 1px solid; 
            font-weight: bold; 
            margin: 2px; 
            padding: 7px 14px; 
            color: #333333; 
        }
        </#if>
        <#if _styleClassName == "orange">
        <#-- CSS orange style pagination -->
        div.orange {
            font-size: 12px;
            font-family: verdana, arial, helvetica, sans-serif;
            padding: 3px; 
            margin: 3px; 
            text-align: center;
            color:#999999;
        }
        div.orange a {
            border: #DFDFDF 1px solid; 
            padding: 7px 14px; 
            margin: 2px; 
            color: #3D3D3D; 
            text-decoration: none;
        }
        div.orange a:hover {
            border: #FE4500 1px solid; 
            background: transparent;
            color:#FE4500;
        }
        div.orange a:active {
            color: #FE4500; 
        }
        div.orange span.current {
            border: #FF4400 1px solid; 
            background: #FF4400;
            font-weight: bold; 
            margin: 2px; 
            padding: 7px 14px; 
            color: #FFFFFF; 
        }
        </#if>
        <#if _styleClassName == "blue">
        <#-- CSS blue style pagination -->
        div.blue {
            font-size: 12px;
            font-family: verdana, arial, helvetica, sans-serif;
            padding: 3px; 
            margin: 3px; 
            text-align: center;
            color:#999999;
        }
        div.blue a {
            border: #E1E2E3 1px solid; 
            padding: 7px 14px; 
            margin: 2px; 
            color: #808080; 
            text-decoration: none;
        }
        div.blue a:hover {
            border: #389CFF 1px solid; 
            background: transparent;
            color:#389CFF;
        }
        div.blue a:active {
            color: #389CFF; 
        }
        div.blue span.current {
            border: #389CFF 1px solid; 
            background: #389CFF;
            font-weight: bold; 
            margin: 2px; 
            padding: 7px 14px; 
            color: #FFFFFF; 
        }
        </#if>
    </style>
</#macro>

上面是pageShow.ftl 文件  这个文件被我进行了些改动 ,

<!--pageShow 总页数, 当前页, 请求服务地址, 页面大小默认15, 显示最多分页个数, 请求服务地址参数默认为p, 分页样式(可选:gray(默认)、orange、blue)-->
        <ul class="fenye">
        	<#import "pageShow.ftl" as page>
        	<@page.pageShow totalPage, p, "list?ndid="+ndidVal, size, "gray" ,maxPage/><br/>
	</ul>

controller

//list 文章列表页
	public void list(){
		int ndid=this.getParaToInt("ndid");//二级栏目 id
		QtSecondmenu nd=QtSecondmenu.dao.findById(ndid);//查出二级信息
		int stid = nd.getInt("st_id");
		List<QtSecondmenu> ndlist=QtSecondmenu.dao.find("select * from qt_secondmenu where st_id=? ",stid);
		List<QtIndexlink> indexlink=QtIndexlink.dao.find("select * from qt_indexlink ");//导航
		
		int pageNum=this.getParaToInt("pn");
		
		System.out.println(pageNum);
			
		int pageSize=10;
		Page<QtArticle> page =QtArticle.dao.queryWebArticle(pageNum,pageSize,ndid);
		
		
		this.setAttr("p", page.getPageNumber());//当前页
		this.setAttr("size", page.getPageSize());//当前页个数
		this.setAttr("ndidVal", ndid);//当前页个数
		
		this.setAttr("totalPage",page.getTotalPage());//总页数
		 
		if(page.getTotalPage() < 10){
			this.setAttr("maxPage",page.getTotalPage());//最多显示的页数6(1,2,3,4,5,6)			
		}else{
			this.setAttr("maxPage",10);//最多显示的页数
		}
		
		this.setAttr("arlist", page.getList());//文章信息
		this.setAttr("ndlist", ndlist);//查出同类型的 二级栏
		this.setAttr("seleVal", ndid);//把ndid 传到前台,前台判断是否有选中样式
		this.setAttr("indexlink", indexlink);//导航
		this.renderFreeMarker("list.html");
	}
	

model

//pageNumber,pageSize, 页数 一个几个
	public Page<QtArticle> queryWebArticle(int pageNum, int pageSize, int ndid) {
		// TODO Auto-generated method stub
		try{
			String select = "select *   ";
			String sqlExceptSelect = " from qt_article where nd_id="+ndid+" ";
			return dao.paginate(pageNum, pageSize, select, sqlExceptSelect);
		}catch(Exception ex)
		{
			ex.printStackTrace();
			return null;
		}
	}















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值