通用分页 利用标签分页

本文介绍了如何实现通用分页功能,通过A标签让用户自行进行分页操作。主要步骤包括PageBean的增强,添加URL和参数映射属性,以及初始化、上下页方法。此外,还涉及标签助手类的编写,用于创建按钮条、隐藏表单和JS代码。最后,通过BookServlet控制类和页面调用标签完成展示。
摘要由CSDN通过智能技术生成

通用分页一 已经把数据展示到页面上,并且能够按代码来规定查询多少条,
这次就就以a标签的形式,由用户来进行分页,

具体的思路
1、 对pagebean增强(添加url、paramMap属性,添加初始化pagebean的方法、最大页、上一页、下一页方法)
2、 将按钮条写入标签助手类
3、 将隐藏的form表单写入标签助手类
4、 将对应的js代码写入标签助手类
5、 测试通用分页是否完善

  • 需要的类
  •  PageBean 	BookServlet 	PageTag 	bookList
    

标签描述文件 z.tld

先把PageBean需要的方法写好

public class PageBean {
   

	private int page = 1;// 页码

	private int rows = 10;// 页大小

	private int total = 0;// 总记录数

	private boolean pagination = true;// 是否分页

	private String url;
	private Map<String, String[]> paramMap = new HashMap<>();

	public void setRequest(HttpServletRequest req) {
   
		this.setPage(req.getParameter("page"));
		this.setRows(req.getParameter("rows"));
		this.setPagination(req.getParameter("pagination"));
		// getRequestURL获取到浏览器请求的全路径
		this.setUrl(req.getRequestURL().toString());
		// getParameterMap可以获取到一次url请求所携带的所有参数
		this.setParamMap(req.getParameterMap());

	}

	public void setPagination(String pagination) {
   
		if (StringUtils.isNotBlank(pagination)) {
   
			this.setPagination(!"false".equals(pagination));
		}
	}

	public void setRows(String rows) {
   
		if (StringUtils.isNotBlank(rows))
			this.setRows(Integer.valueOf(rows));

	}

	public void setPage(String page) {
   
		if (StringUtils.isNotBlank(page)) {
   
			this.setPage(Integer.valueOf(page));
		}
	}

	public PageBean() {
   
		super();
	}

	public String getUrl() {
   
		return url;
	}

	public void setUrl(String url) {
   
		this.url = url;
	}

	public Map<String, String[]> getParamMap() {
   
		return paramMap;
	}

	public void 
简单,简易使用 package auvtech; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport { private String name="page"; private String action; private int measurement; public void setName(String name) { this.name = name; } public void setAction(String action) { this.action = action; } public void setMeasurement(int measurement) { this.measurement = measurement; } @Override public int doStartTag() throws JspException { try{ JspWriter out = pageContext.getOut(); Pageination page=(Pageination)pageContext.getSession().getAttribute(name); //在page中只有3个属性是已知的,1,一共多少记录,2,一页显示多少记录,3,以及返回的结果集 //1.重新给page分布内容 setPage(page); //2.输出html out.print(getHtml(page)); //3.输出js out.print(getJs(page)); }catch(IOException ioException){ throw new JspException(ioException.getMessage() ); } return(SKIP_BODY); } private void setPage(Pageination page){ if (page.getMaxNoteNum() != 0) { // 一共多少页 if (page.getOnePageMaxNum() != 0&&page.getMaxNoteNum() % page.getOnePageMaxNum() == 0) { page.setMaxPageNum(page.getMaxNoteNum() / page.getOnePageMaxNum()); } else if(page.getOnePageMaxNum()!= 0){ page.setMaxPageNum(page.getMaxNoteNum() / page.getOnePageMaxNum() + 1); } }else { page.setMaxPageNum(0); } //设置当前页记录数目 if(page.getResultList()!= null) page.setCurrentPageNoteNum(page.resultList.size()); else page.setCurrentPageNoteNum(0); } //生成html代码 private String getHtml(Pageination page){ StringBuffer sb = new StringBuffer(); //添加一个尺寸框 sb.append("量度米尺:"); sb.append("<input text='text' id='onePageMaxNum' name='onePageMaxNum' size='2' value='"+page.getOnePageMaxNum()+"'/>"); sb.append("[ 总发信息 ]: " + page.getMaxNoteNum() + "条 ,当前是:第" + page.getCurrentPage() + " 页 / 共 " + page.getMaxPageNum() + "页 本页 " + page.getCurrentPageNoteNum() + " 条"); //首页,上一页,下一页,尾页 if(page.getCurrentPage()>1) sb.append(" <a onclick='firstPage();' style='cursor:pointer'>首页</a>"); else sb.append("首页"); if(page.getCurrentPage()>1) sb.append(" <a onclick='previousPage();' style='cursor:pointer'>上一页</a>"); else sb.append("上一页"); if(page.getCurrentPage()<page.getMaxPageNum()) sb.append(" <a onclick='nextPage();' style='cursor:pointer'>下一页</a>"); else sb.append("下一页"); if(page.getCurrentPage()<page.getMaxPageNum()) sb.append(" <a onclick='lastPage();' style='cursor:pointer'>尾页</a>"); else sb.append("尾页"); //跳转 sb.append(" 跳转到:<select name='goToPage' onchange='javascript:goPage(this.value)'>"); for (int i = 1; i <= page.getMaxPageNum(); i++) { sb.append("<option value=").append(i); if ( i == page.getCurrentPage()){ sb.append(" selected"); } sb.append(">第").append(i).append("页</option>"); } sb.append("</select>"); return sb.toString(); } //生成js代码 private String getJs(Pageination page){ StringBuffer sb=new StringBuffer(); sb.append("<script language=javascript>"); //跳转事件 sb.append("function goPage(cpage){").append("window.location='").append(action); sb.append("?currentPageNum='+").append("cpage"); sb.append("+'&onePageMaxNum='+").append("getMaxNum()"); sb.append(";}"); //得到分页米尺数值 sb.append("function getMaxNum(){"); sb.append("var val=document.getElementById('onePageMaxNum').value;"); sb.append("if(val=='') return "+measurement+";"); sb.append(" return document.getElementById('onePageMaxNum').value"); sb.append(";}\n"); //首页 sb.append("function firstPage(){"); sb.append("var loca='"+action+"?currentPageNum="+1+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); //上一页 sb.append("function previousPage(){"); sb.append("var loca='"+action+"?currentPageNum="+(page.getCurrentPage()-1)+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}"); //下一页 sb.append("function nextPage(){"); sb.append("var loca='"+action+"?currentPageNum="+(page.getCurrentPage()+1)+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); //尾页 sb.append("function lastPage(){"); sb.append("var loca='"+action+"?currentPageNum="+page.getMaxPageNum()+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); sb.append("</script>"); return sb.toString(); } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值