• pager-taglib 使用说明2


    传两个值进去:1、pm.totles总记录数 2、pagesize 每页显示页数 3、<pg:param name="parentId"/>传给后台的变量值对(查询条件)

        <!-- 可以在这里插入分页导航条 -->
                
                
                
    <pg:pager url="org.action" items="${pm.totles}"  export="currentPageNumber=pageNumber" maxPageItems="${pagesize}">
    					<pg:param name="parentId"/>
    					
    					 
    					<pg:first>
    						<a href="${pageUrl}">首页</a>
    					</pg:first>
    					<pg:prev>
    						<a href="${pageUrl}">前页</a>
    					</pg:prev>
    					<pg:pages>
    						<c:choose>
    							<c:when test="${currentPageNumber eq pageNumber}">
    								<font color="red">${pageNumber }</font>
    							</c:when>
    							<c:otherwise>	
    								<a href="${pageUrl}">${pageNumber }</a>
    							</c:otherwise>
    						</c:choose>
    					</pg:pages>
    					<pg:next>
    						<a href="${pageUrl}">后页</a>
    					</pg:next>
    					<pg:last>
    						<a href="${pageUrl}">尾页</a>
    					</pg:last>
    </pg:pager>  
    

      struts2的配置文件 变量拦截器中添加 pager.offset 这个值是页面标签传给后台进行分页的

     <interceptor-ref name="params">
                      <param name="excludeParams">dojo..*,^struts..*,pager.offset</param>
                    </interceptor-ref>
    

      Xml代码

     <interceptor-ref name="params">
                      <param name="excludeParams">dojo..*,^struts..*,pager.offset</param>
                    </interceptor-ref>
    

       定义一个获取分页所需变量的拦截器 获取pagesize 每页数 与 开始记录数pager.offset

    public class PagerInterceptor extends AbstractInterceptor{
    
    	@Override
    	public String intercept(ActionInvocation invocation) throws Exception {
    		
    
    		SystemContext.setOffset(getOffset());
    		SystemContext.setPageSize(getPagesize());
    		
    		
    
    		try{
    			return invocation.invoke();
    		}finally{
    			SystemContext.removeOffset();
    			SystemContext.removePagesize();
    		}
    		
    		
    		
    	}
    
    	
    	private int getOffset(){
    		int offset = 0;
    		
    		try {
    			offset = Integer.parseInt(ServletActionContext.getRequest().getParameter("pager.offset"));
    		} catch (Exception ignore) {
    		}
    		return offset;
    	}
    	
    	private int getPagesize(){
    	int pagesize = 0;
    		
    		try {
    			pagesize = Integer.parseInt(ServletActionContext.getRequest().getParameter("pagesize"));
    		} catch (Exception ignore) {
    		}
    		
    		if(pagesize==0){
    			
    			pagesize=10;
    			
    		}
    	//	System.out.println(pagesize);
    		return pagesize;
    	}
    
    }
    

      上面使用了两个ThreadLocal 变量 存储上面的两个值

    public class SystemContext {
    	
    	public static ThreadLocal offset = new ThreadLocal();
    	
    	public static ThreadLocal pageSize = new ThreadLocal();
    	
    	public static int DEFAULT_PAGE_SIZE= 10; 
    
    	public static  void setOffset(int _offset){
    		
    		offset.set(_offset);
    		
    	}
    
    	public static int getOffset(){
    		
    		Integer _offset = (Integer)offset.get();
    		
    		if( _offset ==null){
    			
    			_offset=0;
    		}
    		 
    		 return _offset;
    	}
    	
    	public static void removeOffset(){
    		offset.remove();
    	}
    	
    	
    	public static void setPageSize(int _pageSize){
    		
    		pageSize.set(_pageSize);
    	}
    	
    	public static int getPageSize(){
    		
    		Integer _pageSize= (Integer)pageSize.get();
    		
    		if( _pageSize ==null){
    			
    			_pageSize=DEFAULT_PAGE_SIZE;
    		}
    		 
    		 return _pageSize;
    	 
    	}
    	
    	public static void removePagesize(){
    		pageSize.remove();
    	}
    }
    

        通过从threadlocal 中获取分页所需的变量,就可以在业务类中获取这两个变量,避免了在每个action中传值的麻烦

    public class BaseManager extends HibernateDaoSupport {
    
    ...
    
    
    
    PageMode searchOrgs(String hql, Object[] objects){
    ...		
    		int offset  = SystemContext.getOffset();
    		int pageSize = SystemContext.getPageSize();
    		
    ...
    	List datas =   query.setFirstResult(offset).setMaxResults(pageSize).list();
    ...
    }
    
    
    }
    

        为了使用方面将上面的分页标签页面提取出公共的部分

    <body>
    <pg:pager items="1001" maxPageItems="33" maxIndexPages="20" export="currentPageNumber=pageNumber">
    	<pg:first>
    		<a href="${pageUrl }">首页</a>
    	</pg:first>
    	<pg:prev>
    		<a href="${pageUrl }">前页</a>
    	</pg:prev>
    	<pg:pages>
    		<c:choose>
    			<c:when test="${currentPageNumber eq pageNumber}">
    				<font color="red">${pageNumber }</font>
    			</c:when>
    			<c:otherwise>
    				<a href="${pageUrl }">${pageNumber }</a>
    			</c:otherwise>
    		</c:choose>
    	</pg:pages>
    	<pg:next>
    		<a href="${pageUrl }">下页</a>
    	</pg:next>
    	<pg:last>
    		<a href="${pageUrl }">尾页</a>
    	</pg:last>
    </pg:pager>
    </body>
    

         需要分页的页面只需如下调用:将url 传进去

    	    <!-- 可以在这里插入分页导航条 -->
       <s:include value="/common/pager.jsp">
      	  <s:set var="url" value="'org.action'"/>
     	   <s:set var="params" value="#{'parentId':null}"/>
       </s:include>
    

      

    pg:pager【这个标签用来设置分页的总体参数】重要参数说明:
     url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
     items:总记录数,pager标签正是根据这个值来计算分页参数的
     maxPageItems:每页显示的行数,默认为10
     maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10
     
    pg:first【第一页的标签】重要参数说明:
     export变量的意义:
     pageUrl - 分页链接URL地址(最重要的export参数)
     pageNumber - 页码
     firstItem - 首页第一行的索引值
     lastItem - 首页最后一行的索引值
     
    pg:pre【上一页标签】重要参数说明:
     export变量的意义:
     pageUrl - 分页链接URL地址(最重要的export参数)
     pageNumber - 页码
     firstItem - 前页第一行的索引值
     lastItem - 前页最后一行的索引值

    pg:next【下一页标签】重要参数说明:
     export变量的意义:
     pageUrl - 分页链接URL地址(最重要的export参数)
     pageNumber - 页码
     firstItem - 下页第一行的索引值
     lastItem - 下页最后一行的索引值
     
    pg:last重要参数说明:
     export变量的意义:
     pageUrl - 分页链接URL地址(最重要的export参数)
     pageNumber - 页码
     firstItem - 尾页第一行的索引值
     lastItem - 尾页最后一行的索引值
     
    pg:pages【这个标签用来循环输出页码信息】重要参数说明:
     export变量的意义:
     pageUrl - 分页链接URL地址(最重要的export参数)
     pageNumber - 页码
     firstItem - pageNumber这个页码指定的那一页的第一行的索引值
     lastItem - pageNumber这个页码指定的那一页的最后一行的索引值

  • 相关阅读:
    SAP CRM销售订单UI上的字段对应的数据库表存储字段:requested start date和end date
    SAP Fiori Elements里Drop down list的实现原理
    使用Fiori Elements创建的SAP UI5应用,如何支持编辑功能
    #开工新姿势#开启一年新征程,云社区叫你来充电啦!
    云小课 | 守护网络安全不是问题,iptables的四表五链为你开启“八卦阵”
    所见即搜,3分钟教你搭建一个服装搜索系统!
    AI辅助宫颈癌筛查技术全球居首,守护者的力量来源是?
    干货分享丨从MPG 线程模型,探讨Go语言的并发程序
    网络知识一箩筐:IP地址划分的那些知识点
    MindSpore:基于本地差分隐私的 Bandit 算法
  • 原文地址:https://www.cnblogs.com/koal/p/4399297.html
Copyright © 2020-2023  润新知