web前端分页显示

自己封装一个前端分页工具,用的时候直接调用jsp自定义标签就可以。

1.写一个class分页类,继承自定义标签库类SimpleTagSupport,

2.自定义一个标签库(需要导入jstl包)

3.自定义标签与class类绑定

5.调用

1.首先来写一个java分页类的思路流程,之后再加上前端内容。

PageTage.class

public class PageTag {
	public static void main(String[] args) {
		//分页,显示部分页数
		Integer nowPage = 15;//当前页数
		Integer allPage = 20;//总页数
		Integer offset = 2;//偏移量
		Integer startpage = nowPage-offset<=1?1:nowPage-offset;//起始页数判断
		Integer endPage = nowPage+offset>=allPage?allPage:nowPage+offset;//结束页数判断
		if(nowPage-offset>1){
			System.out.print("1...");
		}
		for(int i = startpage;i<=endPage;i++){
			if(i == nowPage){
				System.out.print(" "+"["+i+"]");
			}else{
				System.out.print(" "+i);
			}
		}
		if(nowPage+offset<allPage){
			System.out.print("..."+allPage);
		}
	}
}

运行结果:1... 13 14 [15] 16 17...20 

只显示包括自身的5个页面。超过这个范围就用(1...)和(...20)代替

所有只循环显示5个数即可。指定页数的前2个数和后2个数,所以偏移量为2。

如果选的是第一页,就判断当前页数减去偏移量是否小于等于1。等于就设置statpage=1。不等于就是当前页数减去偏移量。

最后一页也是同理。

PageTage加上前端,继承自定义标签库

public class pageTag extends SimpleTagSupport{
	
	private Integer nowPage = null;
	private Integer allPage = null;
	private Integer offset = 2;
    //跳转的页面
	private String href;
	
	@Override
	public void doTag() throws JspException, IOException {
		JspContext context = getJspContext();
		JspWriter out = context.getOut();

		Integer startPage = nowPage-offset<=1 ? 1 : nowPage-offset;
		Integer endPage = nowPage+offset>=allPage ? allPage : nowPage+offset;
		if(nowPage-offset>1) out.print("<a href='"+href+"?wantPage=1'>1</a> ... ");
		for (int i = startPage; i <= endPage; i++) {
			if(i==nowPage) {
				out.print(" <a href='"+href+"?wantPage="+i+"'>[" + i + "]</a> ");
			} else {
				out.print(" <a href='"+href+"?wantPage="+i+"'>" + i + "</a> ");
			}
		}
		if(nowPage+offset<allPage) out.print(" ... <a href='"+href+"?wantPage="+countPage+"'>" + allPage + "</a>");
	}

	public void setNowPage(Integer nowPage) {
		this.nowPage = nowPage;
	}

	public void setCountPage(Integer countPage) {
		this.countPage = countPage;
	}

	public void setOffset(Integer offset) {
		this.offset = offset;
	}

	public void setHref(String href) {
		this.href = href;
	}
	
}

继承SimpleTagSupport类后需要重新doTag,

获得自定义标签库里面的封装好的输出流

JspContext context = getJspContext();
        JspWriter out = context.getOut();

然后将之前的代码放到里面

set属性的方法,(调用tag的时候传参)

out.print输出的时候再加上html标签即可。

2.自定义标签库

在WEB-INF下面创建一个file文件。后缀为tld。

 

内容

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    
    <description>my tag library</description>
  <display-name>my Tag</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>my</short-name>
  <uri>http://com.mypage.action/tags</uri>



</taglib>

自定义标签模板。

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">

这是声明,可以直接搬过来。

description声明自定义

display-name自定义

short-name自定义

uri 在jsp页面时需要引入。也可以自定义

在加入tage标签


  <tag>
    <description>
    	页面分页组件
    </description>
    <name>pageTag</name>
    <tag-class>com.woniu.mytage.pageTag</tag-class>
    <body-content>empty</body-content>
  
    <attribute>
        <description>
			当前页码
        </description>
        <name>nowPage</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
        <description>
			总页码
        </description>
        <name>allPage</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
        <description>
			偏移量
        </description>
        <name>offset</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
     <attribute>
        <description>
			请求路径
        </description>
        <name>href</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>

tag 里面的 name 是自己定义标签的名字

tag-class 完整类路径

body-content 元素取值:

empty:表示没有标签体
JSP:表示标签体可以包含JSP代码
scriptless:表示标签体可以包含EL表达式和JSP动作元素,但不能包含JSP的脚本元素
tagdependent:表示标签体交由标签本身去解析处理。即在标签体中所写的任何代码都会原封不动地传给标签处理器

我这里填的empty,这个标签直接用就行

attribute是先class类里面定义好的参数
required表示参数是为必须的。false是可以选参数
rtexprvalue表示
runtime expression value:能不能使用el表达式

 

3.定义好后在jsp页面引入然后调用

调用:

<my:pageTag href="index.action" nowPage="${ page.nowPage }" offset="2" allPage="${ page.allPage }"/>

 

效果:

数据库页数比较少,所以效果可能有点。。。还需要改改

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值