自定义标签分页

首先创建PageBean

 

package com.pjb.sys.tag;

public class PageBean {

	private int totalResults; // 总记录数

	public static int pageSize = 5; // 每页显示的记录数

	private int currentPage = 1; // 当前页号

	public PageBean(int totalResults, int pageSize) {
		super();
		this.totalResults = totalResults;
		PageBean.pageSize = pageSize;
	}

	public PageBean() {

	}

	/**
	 * 
	 * @return 得到总记录数
	 */
	public int getTotalResults() {
		return totalResults;
	}

	public void setTotalResults(int totalResults) {
		this.totalResults = totalResults;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		if (this.currentPage < 1) {
			this.currentPage = 1;
		}
		if (this.currentPage > this.totalResults) {
			this.currentPage = this.totalResults;
		}
		this.currentPage = currentPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		PageBean.pageSize = pageSize;
	}

	public int getTotalPageSize() {
		return (int) Math.ceil(this.totalResults / (double) PageBean.pageSize);
	}

	/**
	 * 是否有下一页
	 * 
	 * @return
	 */
	public boolean IsNextPage() {
		if (this.currentPage < this.getTotalPageSize()) {
			return true;
		}
		return false;
	}

	/**
	 * 是否有上一页
	 */
	public boolean IsUpPage() {
		if (this.currentPage > 1) {
			return true;
		}
		return false;
	}

	/**
	 * 从哪一条开始取
	 */

	public int getStartResult() {
		return (this.currentPage - 1) * PageBean.pageSize;
	}

}

 

标签PageTag类

 

package com.pjb.sys.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

@SuppressWarnings("serial")
public class PageTag extends TagSupport {

	// 请求的action
	private String action;

	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	@Override
	public int doEndTag() throws JspException {

		JspWriter out = pageContext.getOut();
		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
		PageBean pageBean = (PageBean) request.getAttribute("pageBean");

		try {
			out.println("<table>");
			out.println("<tr>");
			out.println("<td>");
			out.println("第" + pageBean.getCurrentPage() + "页");
			out.println("共" + pageBean.getTotalPageSize() + "页" + "共" + pageBean.getTotalResults() + "记录");
			out.println("<a href=\"" + request.getContextPath() + action + "1\">首页</a>");
			out.println("<a href=\"" + request.getContextPath() + action + pageBean.getTotalPageSize() + "\">尾页</a>");

			if (pageBean.IsUpPage()) {

				out.println("<a href=\"" + request.getContextPath() + action + (pageBean.getCurrentPage() - 1)
						+ "\">上页</a>");

			} else {

				out.println("上页");

			}
			if (pageBean.IsNextPage()) {

				out.println("<a href=\"" + request.getContextPath() + action + (pageBean.getCurrentPage() + 1)
						+ "\">下页</a>");

			} else {

				out.println("下页");

			}

			out.println("<select onchange=\"self.location='" + request.getContextPath() + action
					+ "'+this.options[this.selectedIndex].value\">");
			for (int i = 1; i <= pageBean.getTotalPageSize(); i++) {

				if (pageBean.getCurrentPage() == i) {
					out.println("<option value=" + i + " selected>" + i + "</option>");
				} else {
					out.println("<option value=" + i + ">" + i + "</option>");
				}
			}
			out.println("</select>");
			out.println("</td>");
			out.println("</tr>");
			out.println("</table>");

		} catch (IOException e) {

			e.printStackTrace();
		}

		return EVAL_PAGE;
	}

}

 

 

创建mytag.tld文件

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" >
<taglib>
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>my</short-name>
	<tag>
		<name>cutPage</name>
		<tag-class>com.pjb.sys.tag.PageTag</tag-class>
		<attribute>
			<name>action</name>
			<required>true</required>
			<description>请求action 如:showBookPage.do?page</description>
		</attribute>
	</tag>
</taglib>

 

在页面中使用时,需导入标签定义

 

<%@ taglib prefix="my" uri="/WEB-INF/mytag.tld"%>

 

引用标签名

 

<my:cutPage action="/readerManagerAction.do?method=getReaderList&page="></my:cutPage>

 

 action 代码

 

/**
	 * 查询列表
	 * 
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return ActionForward
	 * @throws Exception
	 */
	public ActionForward getReaderList(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		try {
			ReaderService rs = (ReaderService) this.getBean("readerService");
			PageBean pageBean = new PageBean();
			String pageStr = request.getParameter("page");
			if (pageStr != null) {
				pageBean.setCurrentPage(Integer.parseInt(pageStr));
			}
			List<ReaderBean> list = rs.getReaderList(pageBean);
			request.setAttribute("list", list);
			request.setAttribute("pageBean", pageBean);
			return mapping.findForward("showReaderList");
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage());
			request.setAttribute("errMsg", e.getMessage());
		}
		return mapping.findForward("error");
	}

 

ibatis分页取记录DAO

 

 

public List<ReaderBean> getReaderList(PageBean pageBean) throws FrameworkDaoException {
		try {
			List readerList = this.getSqlMapClientTemplate().queryForList("getReaderList", null);
			pageBean.setTotalResults(readerList.size());
			return this.getSqlMapClientTemplate().queryForList("getReaderList", null, pageBean.getStartResult(), pageBean.getPageSize());
		} catch (DataAccessException e) {
			e.printStackTrace();
			throw new FrameworkDaoException(e);
		}
	}

  

 

 

 

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值