`
raymond.chen
  • 浏览: 1441281 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自定义标签:分页标签

阅读更多

一、标签类源代码

public class PageNavigationBarTag extends BaseBodyTagSupport {
	private String pageBean;
	private String actionName;
	
	public String getPageBean() {
		return pageBean;
	}

	public void setPageBean(String pageBean) {
		this.pageBean = pageBean;
	}

	public String getActionName() {
		return actionName;
	}

	public void setActionName(String actionName) {
		this.actionName = actionName;
	}
	
	public int doEndTag() throws JspException {
		if(CommonUtil.isEmpty(pageBean)){
			throw new JspException("pageBean must not be null");
		}
		
		Page page = null;
		Map params = null;
		try{
			page = (Page)getValueStack().findValue(pageBean);
			params = RequestUtil.getParameterMap(getRequest(), "");
		}catch(Exception e){
			throw new JspException(e);
		}
		
		Map dataModel = new HashMap();
		dataModel.put("page", page);
		dataModel.put("params", params);
		dataModel.put("actionName", CommonUtil.trim(actionName));
		
		try{
			String ret = render(pageContext.getServletContext(), dataModel, "taglib/PageNavigationBar.ftl");
			pageContext.getOut().println(ret);
			
		}catch(Exception ex){
			throw new JspException(ex);
		}
		
		return EVAL_PAGE;
	}
}

 

二、Page类源代码

public class Page {
	private int pageIndex = 0; //当前页号
	private int pageSize = 15; //每页记录数
	private int pageCount = 0; //总页数
	private int rowCount = 0; //总记录数
	private List result = null; //页数据

	public Page(){
		
	}
	
	public Page(List result, int rowCount, int pageIndex, int pageSize){
		this.result = result;
		this.rowCount = rowCount;
		this.pageIndex = pageIndex;
		this.pageSize = pageSize;
		
		updatePageCount();
	}

	public int getPageIndex() {
		return pageIndex;
	}

	public int getPageSize() {
		return pageSize;
	}

	public int getPageCount() {
		return pageCount;
	}

	public int getRowCount() {
		return rowCount;
	}

	private void updatePageCount() {
		if(rowCount <= 0){
			rowCount = 0;
		}else{
			int count = rowCount / pageSize;
			if(rowCount % pageSize > 0){
				count++;
			}
			pageCount = count;
		}
	}

	public List getResult() {
		return result;
	}
}

 

三、公共方法源代码

public static Map getParameterMap(HttpServletRequest request, String prefix){
	Map p = new HashMap();
	
	Map paramsMap = request.getParameterMap();
	for(Iterator it=paramsMap.keySet().iterator();it.hasNext();){
		String key = (String)it.next();
		String value = request.getParameter(key);
		if(CommonUtil.isEmpty(value)) continue;
		
		if(CommonUtil.isEmpty(prefix)){
			p.put(key, value);
		}else{
			if(key.startsWith(prefix)){
				p.put(key, value);
			}
		}
	}
	
	return p;
}

 

四、分页方法源代码

public Page findPageByCriteria(final DetachedCriteria dc, final int pageIndex, final int pageSize) {
	return (Page)getHibernateTemplate().execute(new HibernateCallback(){
		public Object doInHibernate(Session session) throws HibernateException, SQLException {
			Criteria c = dc.getExecutableCriteria(session);
			int firstResult = (pageIndex - 1) * pageSize;
			
			//记录总数
			int rowCount = ((Integer)c.setProjection(Projections.rowCount()).uniqueResult()).intValue();
			
			//复位
			c.setProjection(null);
			c.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); //将结果类型转换为原实体类型
			
			//记录集
			List result = c.setFirstResult(firstResult).setMaxResults(pageSize).list();
			
			//页对象
			Page page = new Page(result, rowCount, pageIndex, pageSize);
			return page;
		}
	}, true);
}

 

五、FTL模板源代码

<script language="javascript">
	function chnageCurrentPage(_pageIndex){
		var frm = document.all["frmPageNavigationBar"];
		var objPageIndex = frm.pageIndex;
		if(objPageIndex==null){
			objPageIndex = document.createElement("<input type='hidden' name='pageIndex' value='" + _pageIndex + "'/>");
			frm.appendChild(objPageIndex);
		}else{
			objPageIndex.value = _pageIndex;
		}
		frm.submit();
	}
</script>

<form name="frmPageNavigationBar" method="post" action="${actionName}">
	<#if params?has_content><!-- 所有请求参数包含在页导航条的Form中 -->
		<#list params?keys as key>
			<input type="hidden" name="${key}" value="${params[key]}" />
		</#list>
	</#if>
	
	<table border="0" cellspacing="0" cellpadding="0" class="width9x" align="center">
		<tr>
			<td>第 ${page.pageIndex?string("####")} 页/共 ${page.pageCount?string("####")} 页。找到 ${page.rowCount?string("####")} 条记录。</td>
			<td> </td>
			<td align="right" nowrap width="150">
				<#if page.pageIndex gt 1>
					<a href="#" onclick="chnageCurrentPage(1);"><img src="images/pager/page-first.gif" border="0" alt="首页"></a>
					<a href="#" onclick="chnageCurrentPage(${page.pageIndex-1});"><img src="images/pager/page-prev.gif" border="0" alt="上一页"></a>
				<#else>
					<img src="images/pager/page-first-disabled.gif" border="0" alt="首页">
					<img src="images/pager/page-prev-disabled.gif" border="0" alt="上一页">
				</#if>
				
				<select name="pageIndexList" onchange="chnageCurrentPage(this.options[this.selectedIndex].value)";>
					<#list 1..page.pageCount as x>
						<option value="${x}">${x}</option>
					</#list>
				</select> 
				
				<#if page.pageIndex lt page.pageCount>
					<a href="#" onclick="chnageCurrentPage(${page.pageIndex+1});"><img src="images/pager/page-next.gif" border="0" alt="下一页"></a>
					<a href="#" onclick="chnageCurrentPage(${page.pageCount});"><img src="images/pager/page-last.gif" border="0" alt="末页"></a>
				<#else>
					<img src="images/pager/page-next-disabled.gif" border="0" alt="下一页">
					<img src="images/pager/page-last-disabled.gif" border="0" alt="末页">
				</#if>
			</td>
		</tr>
	</table>
</form>

 六、tld配置

<tag>
	<name>pageNavigationBar</name>
	<tag-class>com.cjm.web.taglib.PageNavigationBarTag</tag-class>
	<body-content>JSP</body-content>
	<attribute>
		<name>pageBean</name>
		<required>true</required>
		<rtexprvalue>true</rtexprvalue>
	</attribute>
	<attribute>
		<name>actionName</name>
		<required>true</required>
		<rtexprvalue>true</rtexprvalue>
	</attribute>
</tag>

  

七、业务方法源代码

DetachedCriteria dc = DetachedCriteria.forClass(User.class);
if(user != null){
	CriteriaUtil.eq(dc, "username", user.getUsername());
	CriteriaUtil.like(dc, "fullname", user.getFullname());
	CriteriaUtil.eq(dc, "mobilephone", user.getMobilephone());
	CriteriaUtil.eq(dc, "enabledTemp", user.getEnabledTemp());
	if(user.getOrg() != null) CriteriaUtil.eq(dc, "org.orgId", user.getOrg().getOrgId());
}
dc.addOrder(Order.asc("username"));

Page page = getBaseService().findPageByCriteria(dc, getPageIndex(), 15);
getValueStack().set("page", page);

 

八、JSP页面源代码

<s:iterator value="page.result" id="user" status="st">
	<tr <s:if test="#st.odd">class="bg1"</s:if><s:else>class="bg2"</s:else>>
		<td align="center"><input type="checkbox" name="chk_o_<s:property value='#st.count'/>" value="<s:property value='#user.username'/>"></td>
		<td align="left"> <s:property value="#user.username"/></td>
		<td align="left"> <s:property value="#user.fullname"/></td>
		<td align="left"> <s:property value="#user.org.name"/></td>
		<td align="left"> <s:property value="#user.mobilephone"/></td>
		<td> <s:property value="#user.gender"/></td>
		<td> <s:property value="#user.enabledTemp"/></td>
		<td align="center"><a href="#" onclick="winOpen('userView.action?userId=<s:property value="#user.username"/>'),void(0);">查看</a></td>
	</tr>
</s:iterator>

<cjm:pageNavigationBar pageBean="page" actionName="userList.action"/>

 

7
1
分享到:
评论
2 楼 nishifei 2008-12-01  
先谢谢 大虾
1 楼 nishifei 2008-12-01  
感觉写的很好, 非常感谢你能无私的 奉献出来, 但是小弟才疏学浅 , 要是能有你的Demo 就好了, 另外, 能不能 简单说说使用 方法。。。恭候。。小弟的邮箱  nshf_10@126.com

相关推荐

    java分页标签自定义分页标签自定义分页标签

    自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签...

    自定义标签实现的分页

    本篇文章将详细讲解如何利用Hibernate框架的自定义标签来实现分页功能,供开发者们参考和借鉴。 首先,我们要了解Hibernate的基本概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发人员使用面向对象...

    jsp使用自定义标签taglib分页系列——完整例子

    jsp使用自定义标签taglib分页系列——完整例子

    自定义标签分页

    5. **在JSP页面中使用自定义标签**:在JSP页面上引入自定义标签库,然后使用自定义的分页标签,传入必要的参数,如当前页码、总页数等。 ```jsp ... &lt;fenye:pagination currentPage="${currentPage}" totalPages=...

    基于struts2 自定义标签 分页

    在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...

    自定义分页标签

    自定义的漂亮分页标签,支持上下翻页,直接跳转指定页

    简单易用的自定义标签分页显示

    //得到分页米尺数值 sb.append("function getMaxNum(){"); sb.append("var val=document.getElementById('onePageMaxNum').value;"); sb.append("if(val=='') return "+measurement+";"); sb.append(" return ...

    一个用于分页的自定义标签

    1. **标签库描述符(TLD)**:在TLD文件中,开发者会声明这个分页标签,包括标签的名字、属性(如当前页数、总页数等)、以及指向标签处理类的引用。 ```xml &lt;name&gt;paging &lt;tag-class&gt;...

    强大的自定义标签分页,内有说明

    "强大的自定义标签分页"是指通过自定义JSP标签来实现灵活、高效的分页功能。这种方式可以提供更高的定制性,使得开发者可以根据项目需求进行个性化的设计和调整。 首先,我们来了解自定义标签。在Java Web开发中,...

    java自定义标签分页

    在这个“java自定义标签分页”主题中,我们将深入探讨如何利用自定义标签来实现高效且易于维护的分页功能。 首先,自定义标签的定义通常涉及以下组件: 1. TLD(Tag Library Descriptor)文件:这是定义自定义标签...

    jsp java自定义标签 实现分页 当前位置标签

    要创建一个分页标签,我们需要: 1. 定义标签接口:在TLD(Tag Library Descriptor)文件中声明自定义标签,包括标签名、属性、导出的Java类等信息。 2. 编写标签实现类:继承`BodyTagSupport`,并覆盖必要的方法,...

    这是一个自定义标签和分页结合的例子,很实用的,灵活性高啊

    在IT行业中,自定义标签(Custom Tags)和分页(Pagination)是两个常见的技术概念,它们在构建高效、用户友好的Web应用程序时起着至关重要的作用。本示例结合了这两个概念,提供了一种灵活且可重用的解决方案。 ...

    Struts2自定义分页标签

    4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...

    java+hibernate+jsp+tld+自定义标签分页

    本项目结合了Java、Hibernate、JSP以及TLD(Tag Library Descriptor)技术,实现了一个高效、易懂且实用的自定义标签分页解决方案。下面我们将详细探讨这些技术以及它们在分页中的应用。 首先,Java作为后端编程...

    自定义页面分页标签自定义页面分页标签

    自定义页面分页标签是指开发者根据项目需求,创建个性化的分页组件,以实现更加灵活、符合界面设计风格的分页功能。下面将详细探讨如何实现自定义页面分页标签及其相关的知识点。 1. **基础概念**: - 分页:将...

    jsp自定义分页标签

    在JavaServer Pages (JSP) 开发中,为了提高代码的可维护性和重用性,开发者经常使用自定义标签库。本主题将深入探讨“jsp自定义分页标签”,这是一种在网页展示大量数据时非常实用的功能,它可以有效地帮助用户浏览...

    freemarker 自定义freeMarker标签

    例如,你可以创建一个自定义标签用于处理分页数据,接受页码和每页数量作为参数,然后在后台查询数据库并返回相应的页面内容。 此外,FreeMarker还支持自定义函数,它们类似于JavaScript中的函数,可以接收参数并...

    jsp自定义标签编写的分页

    在JSP页面中,我们可以这样使用自定义分页标签: ```jsp &lt;mypagination:pagination recordsPerPage="10" totalRecords="${messageCount}" currentPage="${currentPage}" /&gt; ``` 在这个例子中,`messageCount`和`...

    hibernate + 自定义标签分页

    本例中,我们探讨的是如何结合Struts、Hibernate和自定义标签实现分页功能,这是一种常见的优化用户界面体验的技术,特别是对于数据量大的查询结果。 1. **分页原理** 分页的基本思想是将大量数据分成多个小部分,...

Global site tag (gtag.js) - Google Analytics