`
raymond.chen
  • 浏览: 1425652 次
  • 性别: 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分页标签自定义分页标签自定义分页标签

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

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

    "自定义分页标签111.rar"和"自定义分页标签"可能是不同版本或样式的分页标签实现。解压并研究这些文件,可以帮助我们更好地理解和应用自定义分页标签技术。 总的来说,自定义分页标签是一个集前端UI设计、交互逻辑...

    自定义标签实现的分页

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

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

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

    基于struts2 自定义标签 分页

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

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

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

    自定义分页标签

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

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

    //得到分页米尺数值 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开发中,...

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

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

    自定义标签分页

    自定义标签实现jdbc的分页,使用的mysql数据库。

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

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

    jsp自定义标签编写的分页

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

    Taglib自定义标签分页

    本项目“Taglib自定义标签分页”提供了一个完整的解决方案,它实现了在网页上进行分页显示的功能,无需在每个JSP页面中重复编写分页代码,极大地提高了开发效率和代码复用性。 首先,我们需要了解自定义标签的基本...

    JSP自定义标签分页

    JSP自定义标签分页+Struts1.x标签,包含标签分页类、标签tld文件、web.xml配置和调用例子,非常地简单。 只要在Action传request.setAttribute("listUser", listUser);到JSP即可实现自动分页,输出分页样式可以自己去...

    jsp自定义分页标签

    通过这个自定义分页标签的学习,开发者不仅可以掌握自定义标签的开发,还能深入理解JSP的生命周期、EL(Expression Language)以及MVC(Model-View-Controller)设计模式在实际项目中的应用。这对于提升Java Web开发...

    自定义标签代替Struts标签实现分页

    在Java Web开发中,Struts框架是常用的MVC框架之一...这种方式比直接使用Struts的分页标签更加灵活,但需要更多的编码工作。总的来说,自定义标签是Java Web开发中的一个重要技能,能够提升应用的可维护性和可扩展性。

    hibernate + 自定义标签分页

    struts+hibernate+自定义标签 做的分页模板

    邮箱(hibernate+Servlet+自定义标签,内带hibernate配置,自定义标签分页)

    标题和描述中提到的"邮箱(hibernate+Servlet+自定义标签,内带hibernate配置,自定义标签分页)"是一个基于Java技术栈的Web应用项目,它利用Hibernate作为持久层框架,Servlet作为控制层,以及自定义标签来实现前端展示...

Global site tag (gtag.js) - Google Analytics