自定义分页标签详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

关于自定义分页标签的使用,我想大家都见过许多人写过,我今天也来凑个热闹写下我见到的自定义标签的使用步骤

既然是自定义标签那么肯定少不了类和tld文件这两大因素,因为这两个才能构成标签

首先奉献上最核心的自定义分页标签类的写法PagerTag.java,前提是要继承自TagSupport类

   Java代码  收藏代码

  1. "font-size: medium;">package com.javacrazyer.web.tag;  
  2.  
  3. import java.io.IOException;  
  4. import java.util.Enumeration;  
  5.  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.jsp.JspException;  
  8. import javax.servlet.jsp.tagext.TagSupport;  
  9.  
  10.  
  11. /**
  12. * 分页标签处理类
  13. */  
  14. public class PagerTag extends TagSupport {  
  15.    private static final long serialVersionUID = 5729832874890369508L;  
  16.    private String url;         //请求URI  
  17.    private int pageSize = 10;  //每页要显示的记录数  
  18.    private int pageNo = 1;     //当前页号  
  19.    private int recordCount;    //总记录数  
  20.  
  21.    @SuppressWarnings("unchecked")  
  22.    public int doStartTag() throws JspException {  
  23.        int pageCount = (recordCount + pageSize - 1) / pageSize;  //计算总页数  
  24.          
  25.        //拼写要输出到页面的HTML文本  
  26.        StringBuilder sb = new StringBuilder();  
  27.          
  28.          
  29.        sb.append("");  
  30.        sb.append(".pagination {padding: 5px;float:right;font-size:12px;}");  
  31.        sb.append(".pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;border:1px solid #aaaadd;text-decoration:none;color:#006699;}");  
  32.        sb.append(".pagination a:hover, .pagination a:active {border: 1px solid #ff0000;color: #000;text-decoration: none;}");  
  33.        sb.append(".pagination span.current {padding: 2px 5px;margin: 2px;border: 1px solid #ff0000;font-weight: bold;#ff0000;color: #FFF;}");  
  34.        sb.append(".pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}");  
  35.        sb.append("\r\n");  
  36.        sb.append("\r\n");  
  37.        if(recordCount == 0){  
  38.            sb.append("没有可显示的项目\r\n");  
  39.        }else{  
  40.            //页号越界处理  
  41.            if(pageNo > pageCount){      pageNo = pageCount; }  
  42.            if(pageNo < 1){      pageNo = 1; }  
  43.              
  44.            sb.append("this.url)  
  45.                .append("\" name=\"qPagerForm\">\r\n");  
  46.              
  47.            //获取请求中的所有参数  
  48.            HttpServletRequest request = (HttpServletRequest) pageContext  
  49.                    .getRequest();  
  50.            Enumeration enumeration = request.getParameterNames();  
  51.            String name = null;  //参数名  
  52.            String value = null; //参数值  
  53.            //把请求中的所有参数当作隐藏表单域  
  54.            while (enumeration.hasMoreElements()) {  
  55.                name =  enumeration.nextElement();  
  56.                value = request.getParameter(name);  
  57.                // 去除页号  
  58.                if (name.equals("pageNo")) {  
  59.                    if (null != value && !"".equals(value)) {  
  60.                        pageNo = Integer.parseInt(value);  
  61.                    }  
  62.                    continue;  
  63.                }  
  64.                sb.append("
  65.                  .append(name)  
  66.                  .append("\" value=\"")  
  67.                  .append(value)  
  68.                  .append("\"/>\r\n");  
  69.            }  
  70.      
  71.            // 把当前页号设置成请求参数  
  72.            sb.append(""pageNo")  
  73.                .append("\" value=\"").append(pageNo).append("\"/>\r\n");  
  74.              
  75.            // 输出统计数据  
  76.            sb.append(" 共").append(recordCount)  
  77.  
  78.                .append("项")  
  79.                .append(",")  
  80.  
  81.                .append(pageCount)  
  82.  
  83.                .append("页: \r\n");  
  84.              
  85.            //上一页处理  
  86.            if (pageNo == 1) {  
  87.                sb.append("« 上一页")  
  88.                    .append("\r\n");  
  89.            } else {  
  90.                sb.append("
  91.                  .append((pageNo - 1))  
  92.                  .append(")\">« 上一页\r\n");  
  93.            }  
  94.              
  95.            //如果前面页数过多,显示"..."  
  96.            int start = 1;  
  97.            if(this.pageNo > 4){  
  98.                start = this.pageNo - 1;  
  99.                sb.append("1\r\n");  
  100.                sb.append("2\r\n");  
  101.                sb.append("…\r\n");  
  102.            }  
  103.            //显示当前页附近的页  
  104.            int end = this.pageNo + 1;  
  105.            if(end > pageCount){  
  106.                end = pageCount;  
  107.            }  
  108.            for(int i = start; i <= end; i++){  
  109.                if(pageNo == i){   //当前页号不需要超链接  
  110.                    sb.append("")  
  111.                        .append(i)  
  112.                        .append("\r\n");  
  113.                }else{  
  114.                    sb.append("
  115.                        .append(i)  
  116.                        .append(")\">")  
  117.                        .append(i)  
  118.                        .append("\r\n");  
  119.                }  
  120.            }  
  121.            //如果后面页数过多,显示"..."  
  122.            if(end < pageCount - 2){  
  123.                sb.append("…\r\n");  
  124.            }  
  125.            if(end < pageCount - 1){  
  126.                sb.append("
  127.                .append(pageCount - 1)  
  128.                .append(")\">")  
  129.                .append(pageCount - 1)  
  130.                .append("\r\n");  
  131.            }  
  132.            if(end < pageCount){  
  133.                sb.append("
  134.                .append(pageCount)  
  135.                .append(")\">")  
  136.                .append(pageCount)  
  137.                .append("\r\n");  
  138.            }  
  139.              
  140.            //下一页处理  
  141.            if (pageNo == pageCount) {  
  142.                sb.append("下一页 »")  
  143.                    .append("\r\n");  
  144.            } else {  
  145.                sb.append("
  146.                    .append((pageNo + 1))  
  147.                    .append(")\">下一页 »\r\n");  
  148.            }  
  149.            sb.append("\r\n");  
  150.      
  151.            // 生成提交表单的JS  
  152.            sb.append("\r\n");  
  153.            sb.append("  function turnOverPage(no){\r\n");  
  154.            sb.append("    if(no>").append(pageCount).append("){");  
  155.            sb.append("      no=").append(pageCount).append(";}\r\n");  
  156.            sb.append("    if(no<1){no=1;}\r\n");  
  157.            sb.append("    document.qPagerForm.pageNo.value=no;\r\n");  
  158.            sb.append("    document.qPagerForm.submit();\r\n");  
  159.            sb.append("  }\r\n");  
  160.            sb.append("\r\n");  
  161.        }  
  162.        sb.append("

\r\n");      

  •          
  •        //把生成的HTML输出到响应中  
  •        try {  
  •            pageContext.getOut().println(sb.toString());  
  •        } catch (IOException e) {  
  •            throw new JspException(e);  
  •        }  
  •        return SKIP_BODY;  //本标签主体为空,所以直接跳过主体  
  •    }  
  •  
  •    public void setUrl(String url) {  
  •        this.url = url;  
  •    }  
  •    public void setPageSize(int pageSize) {  
  •        this.pageSize = pageSize;  
  •    }  
  •    public void setPageNo(int pageNo) {  
  •        this.pageNo = pageNo;  
  •    }  
  •    public void setRecordCount(int recordCount) {  
  •        this.recordCount = recordCount;  
  •    }  
  • }  
  • WEB-INF/pager.tld的写法

       Xml代码  收藏代码

    1. <span style="font-size: medium;">xml version="1.0" encoding="UTF-8"?>  
    2. <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"  
    3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">  
    5.    <tlib-version>0.9tlib-version>  
    6.    
    7.    <short-name>wshort-name>  
    8.      
    9.    <uri>http://javacrazyer.iteye.com/tags/pageruri>  
    10.      
    11.      
    12.    <tag>  
    13.          
    14.        <name>pagername>  
    15.          
    16.        <tag-class>com.javacrazyer.web.tag.PagerTagtag-class>  
    17.          
    18.        <body-content>emptybody-content>  
    19.          
    20.        <attribute>  
    21.              
    22.            <name>pageNoname>  
    23.              
    24.            <required>truerequired>  
    25.              
    26.            <rtexprvalue>truertexprvalue>  
    27.              
    28.            <type>inttype>  
    29.        attribute>  
    30.          
    31.        <attribute>  
    32.            <name>recordCountname>  
    33.            <required>truerequired>  
    34.            <rtexprvalue>truertexprvalue>  
    35.            <type>inttype>  
    36.        attribute>  
    37.          
    38.        <attribute>  
    39.            <name>pageSizename>  
    40.            <required>truerequired>  
    41.            <rtexprvalue>truertexprvalue>  
    42.            <type>inttype>  
    43.        attribute>  
    44.          
    45.        <attribute>  
    46.            <name>urlname>  
    47.            <required>truerequired>  
    48.            <rtexprvalue>truertexprvalue>  
    49.            <type>java.lang.Stringtype>  
    50.        attribute>  
    51.    tag>  
    52. taglib>span>  

     

    好了,就上面的两个基本要素就已经构成了完整的分页标签,下面就差在页面的使用方式了

    一般的使用步骤为在JSP页面中:

    先倒入标签库:<%@taglib uri="http://javacrazyer.iteye.com/tags/pager" prefix="w"%>

    然后使用:

     

    具体使用示例,上面两个类保持不变

    这个例子可以说非常好的纯servlet项目的例子,大家今后编程如果没有用到任何框架的话,我希望这个例子能给你带来点启示

    前提是导入所有需要的jar包:包括common-dbcp.jar(数据源需要用到),common-dbutils-1.2.jar(数据库CURD操作需要用到,可取代最原始的JDBC操作),junit.jar(测试用到)以及数据库驱动包

    关于上面的common-dbutils非常有用,尤其是在非框架项目中,后面我提供下载



     

     

    首先数据库,这个数据库脚本是我用navicat导出来的

       Sql代码  收藏代码

    1. "font-size: medium;">/*  
    2. Navicat MySQL Data Transfer  
    3. Source Host     : localhost:3306  
    4. Source Database : jstl  
    5. Target Host     : localhost:3306  
    6. Target Database : jstl  
    7. Date: 2010-11-18 14:30:30  
    8. */  
    9.  
    10. SET FOREIGN_KEY_CHECKS=0;  
    11. -- ----------------------------  
    12. -- Table structure for news  
    13. -- ----------------------------  
    14. DROP TABLE IF EXISTS `news`;  
    15. CREATE TABLE `news` (  
    16.  `detail` varchar(255) DEFAULT NULL,  
    17.  `name` varchar(255) DEFAULT NULL,  
    18.  `id` int(11) NOT NULL AUTO_INCREMENT,  
    19.  PRIMARY KEY (`id`)  
    20. ) ENGINE=InnoDB AUTO_INCREMENT=1253 DEFAULT CHARSET=utf8;  
    21.  

     

    实体类News.java

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.domain;  
    2.  
    3. public class News {  
    4.    private int id;  
    5.    private String name;  
    6.    private String detail;  
    7.  
    8.    public int getId() {  
    9.        return id;  
    10.    }  
    11.  
    12.    public void setId(int id) {  
    13.        this.id = id;  
    14.    }  
    15.  
    16.    public String getName() {  
    17.        return name;  
    18.    }  
    19.  
    20.    public void setName(String name) {  
    21.        this.name = name;  
    22.    }  
    23.  
    24.    public String getDetail() {  
    25.        return detail;  
    26.    }  
    27.  
    28.    public void setDetail(String detail) {  
    29.        this.detail = detail;  
    30.    }  
    31.  
    32.    @Override  
    33.    public String toString() {  
    34.        return "News [detail=" + detail + ", id=" + id + ", name=" + name + "]";  
    35.    }  
    36.      
    37.  
    38. }  

    NewsDao.java

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.dao;  
    2.  
    3. import com.javacrazyer.common.PageModel;  
    4. import com.javacrazyer.domain.News;  
    5.  
    6. public interface NewsDao {  
    7.    PageModel findByPager(int pageNo, int pageSize);  
    8.  
    9.    void createNews(News news);  
    10.      
    11.    void update(News news);  
    12.      
    13.    void delete(int id);  
    14.      
    15.    News findbyId(int id);  
    16.      
    17.    int findTotalSize();  
    18.      
    19.  
    20. }  

    NewsImplDao.java

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.daoimpl;  
    2.  
    3. import java.sql.Connection;  
    4. import java.sql.SQLException;  
    5. import java.util.List;  
    6.  
    7. import org.apache.commons.dbutils.DbUtils;  
    8. import org.apache.commons.dbutils.QueryRunner;  
    9. import org.apache.commons.dbutils.handlers.BeanHandler;  
    10. import org.apache.commons.dbutils.handlers.BeanListHandler;  
    11. import org.apache.commons.dbutils.handlers.ScalarHandler;  
    12.  
    13. import com.javacrazyer.common.ConnectionFactory;  
    14. import com.javacrazyer.common.DAOException;  
    15. import com.javacrazyer.common.PageModel;  
    16. import com.javacrazyer.dao.NewsDao;  
    17. import com.javacrazyer.domain.News;  
    18.  
    19. public class NewsDaoImpl implements NewsDao {  
    20.    private QueryRunner qr = new QueryRunner();  
    21.    public void createNews(News news) {  
    22.          
    23.        Connection conn = null;  
    24.        String sql = "insert into news(name,detail) "  
    25.                + " values(?,?)";  
    26.        Object[] param = { news.getName(),news.getDetail() };  
    27.        try {  
    28.            conn = ConnectionFactory.getConn();  
    29.            qr.update(conn, sql, param);  
    30.        } catch (SQLException e) {  
    31.            e.printStackTrace();  
    32.            throw new DAOException("新增新闻信息时出现异常", e);  
    33.        } finally {  
    34.            DbUtils.closeQuietly(conn);  
    35.        }  
    36.  
    37.    }  
    38.  
    39.    public PageModel findByPager(int pageNo, int pageSize) {  
    40.        PageModel pm=new PageModel();  
    41.        Connection conn=null;  
    42.        String sql="select *from news limit ?,?";  
    43.        Object[] param={(pageNo-1)*pageSize,pageSize};  
    44.        List cates=null;  
    45.        int count;  
    46.        try {  
    47.            conn=ConnectionFactory.getConn();  
    48.            cates=(List)qr.query(conn, sql, new BeanListHandler(News.class), param);  
    49.            pm.setDatas(cates);  
    50.            pm.setRecordCount(findTotalSize());  
    51.        } catch (SQLException e) {            
    52.            e.printStackTrace();  
    53.            throw new DAOException("分页查询出错",e);  
    54.        }finally{  
    55.            DbUtils.closeQuietly(conn);  
    56.        }  
    57.        return pm;  
    58.    }  
    59.  
    60.    public void delete(int id) {  
    61.        Connection conn = null;  
    62.        String sql = "delete from news where id=?";  
    63.        Object[] param = { id };  
    64.        try {  
    65.            conn = ConnectionFactory.getConn();  
    66.            qr.update(conn, sql, param);  
    67.        } catch (SQLException e) {  
    68.            e.printStackTrace();  
    69.            throw new DAOException("删除新闻信息时出现异常", e);  
    70.        } finally {  
    71.            DbUtils.closeQuietly(conn);  
    72.        }  
    73.    }  
    74.  
    75.    public News findbyId(int id) {  
    76.        News news=null;  
    77.        Connection conn=null;  
    78.        String sql="select * from news where id=?";  
    79.        Object[] param={id};  
    80.        try {  
    81.            conn=ConnectionFactory.getConn();  
    82.            news=(News)qr.query(conn,sql, new BeanHandler(News.class), param);  
    83.        } catch (SQLException e) {  
    84.            e.printStackTrace();  
    85.            throw new DAOException("根据ID查询新闻信息时出现异常",e);  
    86.        }finally{  
    87.            DbUtils.closeQuietly(conn);  
    88.        }  
    89.        return news;  
    90.    }  
    91.  
    92.    public void update(News news) {  
    93.        Connection conn=null;  
    94.        String sql="update news set name=?,detail=? where id=?";  
    95.        Object[] param={news.getName(),news.getDetail(),news.getId()};  
    96.        try {  
    97.            conn=ConnectionFactory.getConn();  
    98.            qr.update(conn, sql, param);  
    99.              
    100.        } catch (SQLException e) {  
    101.            e.printStackTrace();  
    102.            throw new DAOException("更新新闻信息出错",e);  
    103.        }finally{  
    104.            DbUtils.closeQuietly(conn);  
    105.        }        
    106.    }  
    107.  
    108.    public int findTotalSize() {  
    109.        Connection conn=null;  
    110.        String sql="select count(id) from news";  
    111.        int count=0;  
    112.        try {  
    113.            conn=ConnectionFactory.getConn();  
    114.            count=((Long)qr.query(conn,sql,new ScalarHandler())).intValue();  
    115.              
    116.        } catch (SQLException e) {  
    117.            e.printStackTrace();  
    118.            throw new DAOException("查询记录总数出错",e);  
    119.        }finally{  
    120.            DbUtils.closeQuietly(conn);  
    121.        }  
    122.        return count;  
    123.    }  
    124.  
    125. }  

    PageModel.java

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.common;  
    2.  
    3. import java.util.List;  
    4.  
    5. /**  
    6. * 分页组件(包含当前页结果数据列表和总记录数)  
    7. * 注意,它不是持久化实体类  
    8. *  
    9. */    
    10. public class PageModel {    
    11.    private int recordCount;    
    12.    private List datas;    
    13.        
    14.        
    15.    public int getRecordCount() {    
    16.        return recordCount;    
    17.    }    
    18.    public void setRecordCount(int recordCount) {    
    19.        this.recordCount = recordCount;    
    20.    }    
    21.    public List getDatas() {    
    22.        return datas;    
    23.    }    
    24.    public void setDatas(List datas) {    
    25.        this.datas = datas;    
    26.    }    
    27. }    

     

    数据库连接工具类

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.common;  
    2.  
    3. import java.io.IOException;  
    4. import java.sql.Connection;  
    5. import java.sql.SQLException;  
    6. import java.util.Properties;  
    7.  
    8. import javax.sql.DataSource;  
    9.  
    10. import org.apache.commons.dbcp.BasicDataSource;  
    11.  
    12. /**
    13. *  
    14. * 数据库连接工厂类
    15. *  
    16. */  
    17. public class ConnectionFactory {  
    18.    private static DataSource dss=null;  
    19.    static{  
    20.        Properties pr=new Properties();  
    21.        try {  
    22.            pr.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));  
    23.        } catch (IOException e) {  
    24.            e.printStackTrace();  
    25.        }  
    26.        BasicDataSource ds=new BasicDataSource();  
    27.        ds.setDriverClassName(pr.getProperty("driver_name"));  
    28.        ds.setUrl(pr.getProperty("url"));  
    29.        ds.setUsername(pr.getProperty("username"));  
    30.        ds.setPassword(pr.getProperty("password"));  
    31.        dss=ds;  
    32.    }  
    33.    private ConnectionFactory(){}  
    34.    public static Connection getConn() throws SQLException{  
    35.        return dss.getConnection();  
    36.    }  
    37.  
    38. }  

     上面代码用到的config.properties

       Xml代码  收藏代码

    1. <span style="font-size: medium;">#mysql  
    2. driver_name=com.mysql.jdbc.Driver  
    3. url=jdbc:mysql:///jstl  
    4. username=root  
    5. password=rootspan>  

    DAO实例工具类,类似于Spring的BeanFactory

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.common;  
    2.  
    3. import java.io.IOException;  
    4. import java.util.Properties;  
    5.  
    6. /**
    7. *  
    8. *  
    9. *  自定义简单工厂
    10. */  
    11. public class DAOFactory {  
    12.    public static Properties pr = new Properties();  
    13.    static {  
    14.        try {  
    15.            pr.load(Thread.currentThread().getContextClassLoader()  
    16.                    .getResourceAsStream("daoname.properties"));  
    17.        } catch (IOException e) {  
    18.            // TODO Auto-generated catch block  
    19.            e.printStackTrace();  
    20.        }  
    21.    }  
    22.    public static Object newInstance(String name){  
    23.        Object obj=null;  
    24.        String daoImplName = pr.getProperty(name);  
    25.        if(null!=daoImplName){  
    26.            try {  
    27.                obj=Class.forName(daoImplName).newInstance();  
    28.            } catch (InstantiationException e) {  
    29.                // TODO Auto-generated catch block  
    30.                e.printStackTrace();  
    31.            } catch (IllegalAccessException e) {  
    32.                // TODO Auto-generated catch block  
    33.                e.printStackTrace();  
    34.            } catch (ClassNotFoundException e) {  
    35.                // TODO Auto-generated catch block  
    36.                e.printStackTrace();  
    37.            }  
    38.        }else{  
    39.            throw new RuntimeException("指定名称的DAO类未找到");  
    40.        }  
    41.        return obj;  
    42.    }  
    43. }  

     上面代码用到的配置daoname.properties

       Xml代码  收藏代码

    1. <span style="font-size: medium;">newsdao=com.javacrazyer.daoimpl.NewsDaoImpl  
    2. coursedao=com.javacrazyer.web.tag.CourseDAOImpl  
    3. teacherdao=com.javacrazyer.web.tag.TeacherDAOImpl  
    4. catedao=com.javacrazyer.web.tag.CategoryDAOImpl  
    5. gradao=com.javacrazyer.web.tag.GraduateDAOImpl  
    6. accountdao=com.javacrazyer.web.tag.AccountDAOImplspan>  

    平时开发中常用到的常量存放类

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.common;  
    2.  
    3. import java.util.LinkedHashMap;  
    4. import java.util.Map;  
    5.  
    6. /**
    7. * 系统常量类
    8. *  
    9. * @author tjitcast.com
    10. */  
    11. public class Constant {  
    12.      
    13.      
    14.    /** 状态:可用 */  
    15.    public static final int STATUS_ACTIVE = 1;  
    16.    /** 状态:不可用 */  
    17.    public static final int STATUS_INACTIVE = 0;  
    18.  
    19.    /** 课程类型:全日制 */  
    20.    public static final int COURSE_FULL_TIME = 1;  
    21.    /** 课程类型:业务 */  
    22.    public static final int COURSE_SPARE_TIME = 2;  
    23.    /** 课程类型:免费 */  
    24.    public static final int COURSE_FREE_TIME = 3;  
    25.  
    26.    /** 账号类型:超级管理员 */  
    27.    public static final int ACCOUNT_SUPER = 100;  
    28.    /** 账号类型:普通管理员 */  
    29.    public static final int ACCOUNT_COMMON = 50;  
    30.  
    31.    /** 账号状态:激活 */  
    32.    public static final int ACCOUNT_STATUS_ACTIVE = 1;  
    33.    /** 账号状态:未激活 */  
    34.    public static final int ACCOUNT_STATUS_INACTIVE = 0;  
    35.    /** 账号状态:锁定 */  
    36.    public static final int ACCOUNT_STATUS_LOCK = -1;  
    37.  
    38.    /** 每页要显示的记录数:10 */  
    39.    public static final int PAGE_SIZE =10;  
    40.  
    41.    private static Map statusMap = new LinkedHashMap();  
    42.  
    43.    static {  
    44.        // 对状态Map进行初始化  
    45.        statusMap.put(Integer.valueOf(STATUS_ACTIVE), "可用");  
    46.        statusMap.put(Integer.valueOf(STATUS_INACTIVE), "不可用");  
    47.    }  
    48.  
    49.    public static Map getStatusMap() {  
    50.        return statusMap;  
    51.    }  
    52.  
    53. }  

     

    开发中常用到的用来判断空值,类型转换,集合操作等等的自定义常用工具类

       Java代码  收藏代码

    1. "font-size: medium;">/**
    2. *  ClassName: DataValidateUtil.java
    3. *  created on Jul 10, 2009
    4. *  Copyrights 2009 www.tjicast.com All rights reserved.
    5. *  site: http://www.tjitcast.com
    6. *  email: tjhr@csdn.net
    7. *  phone: 022-83726777,89721888
    8. */  
    9. package com.javacrazyer.common;  
    10.  
    11. import java.text.ParseException;  
    12. import java.text.SimpleDateFormat;  
    13. import java.util.Collection;  
    14. import java.util.Date;  
    15. import java.util.Map;  
    16.  
    17. /**
    18. * 对一些常用数据进行操作的工具类
    19. *  
    20. */  
    21. public class DataOptUtil {  
    22.      
    23.      
    24.    /** 日期长格式 */  
    25.    public static final String DATE_PATTERN_LONG = "yyyy-MM-dd HH:mm:ss";  
    26.    /** 日期格式 */  
    27.    public static final String DATE_PATTERN = "yyyy-MM-dd";  
    28.      
    29.    public static boolean isNotNull(String str){  
    30.        if(null != str && !"".equals(str)){  
    31.            return true;  
    32.        }else{  
    33.            return false;  
    34.        }  
    35.    }  
    36.      
    37.    public static int parseInt(String str){  
    38.        if(isNotNull(str)){  
    39.            return Integer.parseInt(str);  
    40.        }else{  
    41.            throw new RuntimeException("字符串为空,不能转换成数字");  
    42.        }  
    43.    }  
    44.      
    45.    public static Date parseDate(String str, String pattern){  
    46.        SimpleDateFormat sdf = new SimpleDateFormat(pattern);  
    47.        Date date = null;  
    48.        if(isNotNull(str)){  
    49.            try {  
    50.                date = sdf.parse(str);  
    51.            } catch (ParseException e) {  
    52.                e.printStackTrace();  
    53.            }  
    54.        }else{  
    55.            throw new RuntimeException("字符串为空,不能转换成日期");  
    56.        }  
    57.        return date;  
    58.    }  
    59.      
    60.    public static Date parseDate(String str){  
    61.        return parseDate(str, DataOptUtil.DATE_PATTERN);  
    62.    }  
    63.      
    64.    public static Date parseLongDate(String str){  
    65.        return parseDate(str, DataOptUtil.DATE_PATTERN_LONG);  
    66.    }  
    67.      
    68.    public static String date2String(Date date, String pattern){  
    69.        SimpleDateFormat sdf = new SimpleDateFormat(pattern);  
    70.        return sdf.format(date);  
    71.    }  
    72.      
    73.    public static String Date2String(Date date){  
    74.        return date2String(date, DataOptUtil.DATE_PATTERN);  
    75.    }  
    76.      
    77.    public static String Date2LongString(Date date){  
    78.        return date2String(date, DataOptUtil.DATE_PATTERN_LONG);  
    79.    }  
    80.      
    81.    public static int getSize(Collection coll){  
    82.        int size = coll == null ? 0 : coll.size();  
    83.        return size;  
    84.    }  
    85.      
    86.    public static int getSize(Map map){  
    87.        int size = map == null ? 0 : map.size();  
    88.        return size;  
    89.    }  
    90.      
    91.    public static int getLength(Object[] obj){  
    92.        int length = 0;  
    93.        length = obj == null ? 0 : obj.length;  
    94.        return length;  
    95.    }  
    96. }  

     

    还有一个自定义非受检异常类

       Java代码  收藏代码

    1. "font-size: medium;">package com.javacrazyer.common;  
    2.  
    3. /**
    4. *
    5. * 自定义的非受检异常
    6. *  
    7. */  
    8. public class DAOException extends RuntimeException {  
    9.  
    10.    private static final long serialVersionUID = 1047748781772098415L;  
    11.  
    12.    public DAOException() {  
    13.        super();  
    14.    }  
    15.  
    16.    public DAOException(String message, Throwable cause) {  
    17.        super(message, cause);  
    18.    }  
    19.  
    20.    public DAOException(String message) {  
    21.        super(message);  
    22.    }  
    23.  
    24.    public DAOException(Throwable cause) {  
    25.        super(cause);  
    26.    }  
    27.      
    28. }  
    29.  

     

    页面方面

    index.html

       Java代码  收藏代码

    1. "font-size: medium;">  
    2.      
    3.         "Content-Type" content="text/html; charset=UTF-8" />  
    4.        "refresh" content="0; url=do.jsp" />  
    5.      
    6.  

     

    do.jsp

       Java代码  收藏代码

    1. "font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%@page import="com.javacrazyer.common.DAOFactory"%>  
    3. <%@page import="com.javacrazyer.dao.NewsDao"%>  
    4. <%@page import="com.javacrazyer.common.PageModel"%>  
    5. <%@page import="com.javacrazyer.common.DataOptUtil"%>  
    6. <%@page import="com.javacrazyer.common.Constant"%>  
    7. <%@page import="com.javacrazyer.domain.News"%>  
    8. <%  
    9. NewsDao dao=(NewsDao)DAOFactory.newInstance("newsdao");  
    10.  
    11. int pageNo = 1;  
    12. String temp = request.getParameter("pageNo");  
    13. if (DataOptUtil.isNotNull(temp)) {  
    14.    pageNo = Integer.parseInt(temp);  
    15. }  
    16. int categoryid = 1;  
    17. String temp1 = request.getParameter("category_id");  
    18. if (DataOptUtil.isNotNull(temp1)) {  
    19.    categoryid = Integer.parseInt(temp1);  
    20. }  
    21. PageModel pm=dao.findByPager(pageNo,Constant.PAGE_SIZE);  
    22. request.setAttribute("pm",pm);  
    23. request.setAttribute("pageNo", Integer.valueOf(pageNo));  
    24. request.setAttribute("pageSize", Constant.PAGE_SIZE);  
    25. request.getRequestDispatcher("/index.jsp").forward(request,response);  
    26. %>  

    index.jsp

       Java代码  收藏代码

    1. "font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%@taglib uri="http://javacrazyer.iteye.com/tags/pager" prefix="w"%>  
    3. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
    4. <%  
    5. String path = request.getContextPath();  
    6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    7. %>  
    8.  
    9. "-//W3C//DTD HTML 4.01 Transitional//EN">  
    10.  
    11.    
    12.    "<%=basePath%>">  
    13.      
    14.    My JSP <span class="string" style="margin: 0px; padding: 0px; border: none; color: blue; background-color: inherit;">'index.jsp' starting page  
    15.    "pragma" content="no-cache">  
    16.    "cache-control" content="no-cache">  
    17.    "expires" content="0">      
    18.    "keywords" content="keyword1,keyword2,keyword3">  
    19.    "description" content="This is my page">  
    20.      
    21.    
    22.    
    23.    
    24.  

      新闻列表


       
    25.    
    26.  
    27.   "${pm.datas}" var="news">  
    28.  
    29.    
    30.  
    31. 新闻编号 新闻标题 新闻内容
      ${news.id} ${news.name } ${news.detail}
    32.   "${pageSize}" pageNo="${pageNo}" url="do.jsp" recordCount="${pm.recordCount}"/>  
    33.    
    34.  

    实际运行出来的效果



    虽然自定义标签使用成功了,但总不可能每次开发项目都写下这个类和加上TLD文件吧,比较简洁的方式就是将编译类编译好的class文件和tld一起打成jar包,以后直接导入到项目lib中就可以使用了

     

    具体步骤:将整个目录com/javacrazyer/web/tag/PagerTag.class放到一个目录中去,同时将META-INF拷贝到与com目录相同的目录下,最后将WEB-INF下的pager.tld拷贝到MET-INF下


    META-INF中的文件
     

    最后将com文件夹与META-INF文件选中右键添加到压缩文件,选中ZIP压缩格式



    改名为jar后缀后确定,这样在同一目录就会多出一个jar来了


     

     

    以后只要在需要的地方导入该分页JAR包,并且在网页上

    <%@taglib uri="http://javacrazyer.iteye.com/tags/pager" prefix="w"%>

     

     

     

     

     

     

     

    • JSTL_Pager.rar (991.6 KB)
    • 描述: 完整分页标签项目
    • 下载次数: 542

    本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/6305969.html,如需转载请自行联系原作者

    相关实践学习
    如何快速连接云数据库RDS MySQL
    本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    相关文章
    |
    8月前
    |
    前端开发
    bladex自定义分页
    bladex自定义分页
    |
    8月前
    |
    前端开发
    bladex中自定义分页的写法~
    bladex中自定义分页的写法~
    |
    算法 JavaScript Java
    通用分页【下】(将分页封装成标签)
    调试()是指在软件开发过程中,通过识别、定位和解决程序错误或问题的过程。调试的目的是找出代码中的错误、异常或不正常的行为,并修复它们,以确保程序能够按照预期的方式运行。调试是一个重要的开发技巧,可以帮助开发人员理解程序的执行过程、找出错误的原因,并从中学习和改进。调试可以使用不同的工具和技术来辅助,例如打印输出、日志记录、调试器(debugger)等。调试是开发过程中不可或缺的一部分,可以帮助开发人员提高代码质量、加快解决问题的速度,并优化程序的性能和可靠性。
    pageable 使用自定义list实现分页
    pageable 使用自定义list实现分页
    147 0
    list自定义参数分页
    list自定义参数分页
    93 0
    |
    Java 开发者
    自定义标签之带有属性的标签 | 学习笔记
    快速学习自定义标签之带有属性的标签
    |
    数据库
    分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?
    目的: 1、一个页面(DataList.aspx)可以显示多个模块的列表功能。      一般是有一个列表需求就需要一个aspx文件,如果有100个列表,那么就会有100个aspx文件,这么多的文件(包括.aspx.cs文件)里面的内容基本是一样的,这样写起来麻烦,管理起来也不容易,命名就是一个比较头痛的问题。
    1088 0
    |
    Java 应用服务中间件 数据格式

    相关实验场景

    更多